Поделиться через


Отображение контекстов устройства

Приложение получает контроллер домена отображения путем вызова функции BeginPaint, GetDCили Функции GetDCEx и идентификации окна, в котором будут отображаться соответствующие выходные данные. Как правило, приложение получает контроллер домена отображения, только если он должен нарисовать в клиентской области. Однако можно получить контекст окна устройства путем вызова функции GetWindowDC. После завершения рисования приложение должно освободить контроллер домена, вызвав функцию EndPaint или ReleaseDC.

Существует пять типов DCs для отображения видео:

  • Класс
  • Общий
  • Частный
  • Окно
  • Родитель

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

контексты устройств класса поддерживаются строго для совместимости с 16-разрядными версиями Windows. При написании приложения избегайте использования контекста устройства класса; вместо этого используйте контекст частного устройства.

Общие контексты устройств

общие контексты устройств отображаются в специальном кэше системы. Распространенные контексты устройств используются в приложениях, выполняющих редкие операции рисования. Прежде чем система возвращает дескриптор контроллера домена, он инициализирует общий контекст устройства с объектами, атрибутами и режимами по умолчанию. Все операции рисования, выполняемые приложением, используют эти значения по умолчанию, если ни одна из функций GDI не вызывается для выбора нового объекта, изменения атрибутов существующего объекта или выбора нового режима.

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

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

контексты частных устройств отображаются на контроллерах домена, которые, в отличие от общих контекстов устройств, сохраняют любые изменения данных по умолчанию даже после выпуска приложения. Контексты частных устройств используются в приложениях, выполняющих многочисленные операции рисования, такие как приложения для проектирования с помощью компьютеров (CAD), приложения для публикации на рабочем столе, рисование и рисование приложений и т. д. Контексты частных устройств не являются частью системного кэша и поэтому не нужно выпускать после использования. Система автоматически удаляет контекст частного устройства после уничтожения последнего окна этого класса.

Приложение создает контекст частного устройства, сначала указывая стиль класса CS_OWNDC окна при инициализации стиля члена структуры WNDCLASSи вызывает функциюRegisterClass. (Дополнительные сведения о классах окон см. в разделе Классы окон.)

После создания окна с стилем CS_OWNDC приложение может вызывать GetDC, GetDCExили BeginPaint, чтобы получить дескриптор, определяющий контекст частного устройства. Приложение может продолжать использовать этот дескриптор (и связанный контроллер домена), пока не будет удалено окно, созданное с помощью этого класса. Любые изменения графических объектов и их атрибутов или графические режимы сохраняются системой, пока окно не будет удалено.

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

Контекст устройства окна позволяет приложению рисовать в любом месте окна, включая неклиентную область. Контексты устройств окна обычно используются приложениями, обрабатывающими WM_NCPAINT и WM_NCACTIVATE сообщения для окон с пользовательскими неклиентными областями. Использование контекста устройства окна не рекомендуется использовать для других целей. Дополнительные сведения; см. GetWindowDC.

Контексты родительского устройства

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