Вернуться наверх
aco.ifmo.ru photonic
вернуться в оглавление предыдущая глава предыдущий параграф следующий параграф следующая глава


4.1. Контекст устройства и его разновидности

Отображение элементов графического пользовательского интерфейса в операционной системе Windows осуществляется библиотекой GDI, которая является частью API. В ней реализовано большое количество функций для вывода на экран (в окна) простейших графических примитивов, а также самих элементов графического пользовательского интерфейса (элементов окон, элементов управления). Библиотека MFC обеспечивает осуществление графического вывода на основе объектно-ориентированного подхода.

Всю информацию о моделируемом объекте обычно трудно отобразить только в стандартных элементах управления. Программистам необходимо самим отображать (рисовать) объекты моделирования, графики, характеризующие их параметры и т.п. Операционная система делает всё, чтобы этот процесс был простым. В частности, графический вывод осуществляется унифицированно в независимости от устройства вывода (принтер или экран). Это достигается благодаря понятию контекст устройства (DC, Device Context). Контекст устройства связывает универсальный графический вывод с конкретным устройством, определяет систему координат и режимы графического вывода.

Базовый класс для работы с конекстом устроейства - CDC. Именно в нем инкапсулирована информация о параметрах графического вывода. Контекст устройства предоставляет средства для рисования, а также позволяет менять инструменты рисования (перья, кисти и т.п.)

Окно - основной объект графического пользовательского интерфейса, и при выводе информации на экран графический вывод осуществляется именно в окна. В каждый момент времени только одно окно является устройством вывода. Для получения контекста окна как устройства для графического вывода можно воспользоваться функцией GetDC() класса CWnd, которая возвращает указатель на контекст устройства для рисования в окне. При рисовании в окнах можно воспользоваться услугами наследников класса CDC.

Для орагнизации стандартной процедуры рисования в клиентской области окна при обработке события WM_PAINT можно использовать экземпляр класса CPaintDC. Для извещения о перерисовке в его конструкторе вызывается функция BeginPaint, а в деструкторе EndPaint. Класс CClientDC не выполняет эти функции автоматически, а предосталяет пользователю полную свободу в организации процедуры рисования. При использовании класса CWindowDC рисование может выполняться не только в клиентской области, но и в служебных областях окна (поверх заголовка, рамки или меню). Библиотека MFC предоставляет также контекст CMetaFileDC, который связан с метафайлом, в котором в специальном формате сохраняются команды для вызова фунций GDI.