Здавалка
Главная | Обратная связь

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



CClientDC dc(this); // Сформировали объект dc

Dc.MoveTo(m_X,m_Y); // Переместили перо в точку (m_X,m_Y)

m_X=point.x; // Определяем координаты указателя

m_Y=point.y; // мыши при нажатии левой кнопки

Dc.LineTo(m_X,m_Y);// Проводим линию

CView::OnLButtonDown(nFlags, point);

}

Здесь функция обработки нажатия левой кнопки мыши вставлена с помощью мастера ClassWizard. Координаты m_Xиm_Yобъявлены как статические для сохранения их значений после завершения работы функции.

Следует обратить внимание на то, что в примере не задавались параметры пера – они определены по умолчанию. На рис. 2 показан пример вывода графики.

 
 

Базовым для всех классов, представляющих в библиотеке MFC контексты устройств, является класс CDC. Он предлагает разработчикам набор функций для работы с устройствами, такими как экран дисплея или принтер, а также функций, позволяющих работать с окнами Windows в целом или только с клиентской их частью. Еще раз подчеркну – все операции рисования выполняются толькодля объектов класса CDC. Из всех классов, предоставляющих интерфейс с контекстами устройств, только этот класс обеспечивает разработчиков всем необходимым для реализации правильного и эффективного графического вывода. Остальные классы, в основном отличающиеся конструктором и деструктором, можно считать вспомогательными.

Система Windows имеет в своем составе, пожалуй, только два вида объектов, число функций для взаимодействия с которыми несоизмеримо с количеством функций для всех других объектов. Речь идет об окнах и контекстах устройств. Естественно, что и библиотека классов MFC обеспечивает соответствующие классы не менее широким набором компонентов-функций.

Создание объекта класса

И его связь с контекстом устройства

Все классы библиотеки MFC, непосредственно связанные с объектами Windows, обеспечивают программиста более удобным и понятным интерфейсом. Часто класс имеет в своем составе конструктор по умолчанию, т.е. без параметров, который только создает объект класса, никак не связанный с объектом Windows. Так как работа с объектами Windows происходит только через дескрипторы, класс должен иметь возможность для их хранения. Рассмотрим упомянутые механизмы и их поддержку в реализации класса CDC.

Компоненты класса

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

НDС СDC::m_hDC –дескриптор контекста устройства графического вывода.

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

По умолчанию m_hDCи m_hAttribDCравны. В принципе контекст устройства вывода m_hDCиспользуется только для выполнения операций рисования, а через второй контекст запрашиваются параметры. Например, функция SetTextColorработает с m_hDC, a GetTextColor– с m_hAttribDC. Однако, этот механизм имеет смысл только для объектов класса CMetaFileDC, когда m_hDCнастроен на метафайл, a m_hAttribDCнастроен на физическое устройство вывода, параметры которого используются для рисования. Аналогичный механизм используется и для режима предварительного просмотра печати (print preview), реализованного в большом количестве приложений. Для этих целей могут применяться функции SetOutputDCи SetAtrribDC, которые позволяют приложению связывать объект класса с различными контекстами устройств для графического вывода и получения текущих параметров.

Тем не менее, иногда возникает необходимость получения параметров вывода текста от обоих контекстов. В табл.1 показаны пары функций, используемых в таких случаях.

Таблица 1. Примеры пар функций для работы с различными контекстами

m_hAttribDC m_hDC
GetTextExtent GetOutputTextExtent
GetTabbedTextExtent GetOutputTabbedTextExtent
GetTextMetrics GetOutputTextMetrics
GetCharWidth GetOutputCharWidth

Конструктор создает объект класса, не связывая его с конкретными контекстами устройств. Для дальнейшей работы необходимо осуществить связывание контекста устройства Windows, который, возможно, следует еще и создать, с объектом класса.

Инициализация

Функции этой группы либо непосредственно создают контексты для конкретных устройств и инициализируют данные класса соответствующими Дескрипторами, либо только осуществляют связывание или, наоборот, разрывают связь с существующими контекстами устройств. Из таких функций стоит выделить следующие.

Основная функция создания контекста устройства и инициализации объекта класса CDC CreateDC.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.