Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

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. Эта переменная из класса документа. Выбранный шрифт надо приписать к контексту устройства, после этого весь вывод на форму будет осуществляться новым шрифтом:

Новый шрифт

<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS