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

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

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

  • Класс
  • Распространенные
  • Личные
  • Окно
  • Parent

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

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

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

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

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

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

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

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

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

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

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

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

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