Контекст устройства. Работа с текстом. Диалоговое окно выбора цвета. Настройка режима отображения. Точечный рисунок. Класс CBitmap

Страницы работы

Содержание работы

Лекция 10

Контекст устройства_ 2

Класс CDC и его производные 2

Объявление контекста 2

Работа с текстом_ 3

Вывод текста. Функция TextOut 3

Вывод текста в прямоугольнике отсечения. Функция ExtTextOut 3

Цвет фона. Функции GetBkColor, SetBkColor 4

Цвет символов текста. Функции GetTextColor, SetTextColor 4

Выравнивание текста. Функции GetTextAlign, SetTextAlign 4

Пример рисования текста 5

Цветовая система RGB_ 6

Диалоговое окно выбора цвета_ 7

Конструктор класса CColorDialog_ 7

Отображение диалогового окна. Функция DoModal 7

Получение выбранного цвета. Функция GetColor 7

Получение дополнительных цветов. Функция GetSavedCustomColors 7

Пример использования диалогового окно выбора цвета 7

модель перьевого плоттера_ 8

Перемещение карандаша. Функция MoveTo 8

Рисование отрезка. Функция LineTo 9

Рисование точки. Функция SetPixel 9

Получение цвета точки. Функция SetPixel 9

Рисование графических примитивов_ 9

Рисование прямоугольника. Функция Rectangle 9

Рисование округлённого прямоугольника. Функция RoundRect 9

Рисование эллипса. Функция Ellipse 10

Рисование эллиптической дуги. Функция Arc 10

Рисование эллиптической дуги и хорды. Функция Chord 10

Рисование ломаной линии. Функция Polyline 10

Рисование многоугольника. Функция Polygon 11

карандаш. Класс CPen_ 11

Конструкторы класса СРеn 11

Создание карандаша. Функция CreatePen 12

Создание указателя на карандаш. Тип HPEN_ 12

Использование объекта. Функция SelectObject 12

Получение атрибутов объекта. Функция GetObject 13

Настройка режима отображения_ 13

Выбор единиц измерения. Функция SetMapMode 13

Задание произвольных единиц измерения. Функции SetViewportExt и SetWindowExt 14

Размер прямоугольника. Структура SIZE_ 14

Настройка начала координат. Функции SetViewportOrg и SetWindowOrg_ 14

Получение размеров клиентской области. Функция GetClientRect 14

Пример настройки режима отображения 15

кисть. Класс CBrush_ 16

Конструкторы класса CBrush 16

Образец физической кисти. Структура LOGBRUSH_ 16

Создание кисти_ 17

Пример создания и использования кисти_ 17

Точечный рисунок. Класс CBitmap_ 18

Создание точечного рисунка. Функция CreateBitmap 18

Создание ресурса точечного рисунка 18

Загрузка ресурса точечного рисунка. Функция LoadBitmap 19

Контекст устройства

Контекстом устройства называется область памяти, используемая в системе Windows для выполнения графических операций. Графический вывод может выполняться как на экран, так и на принтер. Объекты класса CDC (Class Device Contacts) содержат множество встроенных методов, используемых в процессе рисования в контексте устройства. Все рисование в Windows выполняется через контекст устройства.

Контексты устройств упрощают задачи программирования. Дело в том, что они могут соответствовать самым разным устройствам, например, экрану монитора или принтеру. Если вы рисуете через контекст устройства, то изображение будет правильно отображаться на разных устройствах, в том числе на экране и на принтере без изменения кода.


Класс CDC и его производные

Иерархия классов контекстов приведена на рисунке.

Ø  CDC – базовый класс для всех классов, инкапсулирующих контексты устройств Windows. Объекты этого класса используются при работе с экраном дисплея или с принтером

Ø  CPaintDC – используется только в обработчике сообщения WM_PAINT

Ø  CСlientDC – используется только при работе с клиентской областью окна.

Ø  CWindowsDC – используется при работе со всем окном, как с клиентской, так и с неклиентской областью.

Ø  CMetaFileDC – используется при работе с метафайлами

Класс CDC имеет два члена данных для хранения дескрипторов:

HDC m_hDC – дескриптор контекста устройства графического вывода.

HDC m_hAttribDC – дескриптор контекста устройства используется для получения параметров устройства.

По умолчанию оба дескриптора равны.

Объявление контекста

Для рисования в клиентской области окна удобно использовать виртуальную функцию прорисовки экрана. Она реализована в виде заглушки afx_msg OnPaint. Как правило, MFC Class Wizard сам добавляет скелет кода этой функции в код класса диалогового окна.

class CGraphDlg : public CDialog

{

protected:

         afx_msg void OnPaint () ;

         DECLARE_MESSAGE_MAP ()

         …

};

Функция OnPaint вызывается в тот момент, когда окно получает сообщение WM_PAINT. Это сообщение посылается окну всегда, когда требуется перерисовка экрана. Например, при увеличении размера окна, если окно выходит на передний план, при запуске программы.

Поскольку наша программа должна реагировать на событие перерисовки экрана, то карта сообщений должна содержать вызов соответствующей функции ON_WM_PAINT

BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)

         ON_WM_PAINT

         …

END_MESSAGE_MAP()

Переопределяем функцию перерисовки окна.

void CMainWnd::OnPaint()

{

// объявление экземпляра класса CPaintDC для работы с клиентской областью окна

// связывает его с контекстом устройства текущего диалогового окна

         CPaintDC dc ( this ) ;

         dc.TextOut ( 200 , 200 , "Hello MFC Program" ) ;       // Написать в окне привет

Похожие материалы

Информация о работе