C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Урок 39. Стандартный диалог для выбора шрифта / Уроки MFC / Visual C++

Visual C++. MFC
Урок 39. Стандартный диалог для выбора шрифта

Продолжаем изучение стандартных диалоговых окон. На этом занятии мы с вами посмотрим, как работать со стандартным диалогом для выбора шрифта. Создайте новый пустой проект типа SDI (для сего выберите MFC AppWizard (EXE) в качества типа проекта и далее Single Document на первом шаге мастера, после чего просто нажмите на Finish). Добавьте пункт меню Options и в нем подпункт Font. В нашей программе по щелчку по этому пункту меню будет появляться стандартное диалоговое окно для выбора шрифта. После выбора пользователем шрифта в основном окне нашей программы будет появляться написанная этим шрифтом надпись "Test".

В обработчик для добавленного меню в классе вида напишите следующие строки:

void CFontdlgView::OnOptionsFont() 
{
    // TODO: Add your command handler code here
    CFontDialog dlg; //Заводим переменную для диалогового окна
    if(dlg.DoModal()==IDOK){
        memcpy(&m_lf, dlg.m_cf.lpLogFont, sizeof(LOGFONT));
        m_Font.CreateFontIndirect(&m_lf); //Создаем шрифт
    }
    //Перерисовываем окно
    Invalidate();
}

Тут мы сначала заводим переменную типа для стандартного диалога выбора шрифта, затем в строке

        ...
        memcpy(&m_lf, dlg.m_cf.lpLogFont, sizeof(LOGFONT));
        ...

мы заполняем структуру m_lf типа LOGFONT. При заполнении мы используем поле m_cf из класса CFontDialog. Затем мы создаем на основе этой структуры шрифт с помощью метода CreateFontIndirect класса CFont.

Разумеется, переменные m_lf типа LOGFONT и m_Font типа CFont ; должны быть где-то определены. Например, их можно завести в классе вида:

class CFontdlgView : public CView
{
    ...
public:
    LOGFONT m_lf;
    CFont m_Font;
    ...

Если вам надо, чтобы выбранный пользователем шрифт сохранялся в файле, то эти переменные надо объявить в классе документа и получеть к ним доступ через метод GetDocument() класса Вида. Впрочем, это замечание не относится к теме этого урока.

Теперь код для перерисовки (т. е. для вывода надписи "Test" выбранным шрифтом). Его мы пишем в заготовке метода OnDraw класса Вида:

void CFontdlgView::OnDraw(CDC* pDC)
{
    CFontdlgDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    //Приписываем заданный пользователем шрифт к контексту устройства
    pDC->SelectObject(&m_Font);
    //Выводим надпись выбранным шрифтом
    pDC->TextOut(10, 10, "Test");
}

Выбранный пользователем шрифт сохранился в переменной m_Font типа CFont. Эта переменная из класса документа. Выбранный шрифт надо приписать к контексту устройства, после этого весь вывод на форму будет осуществляться новым шрифтом:

Новый шрифт