Контексты устройства отображения классов
Используя контекст устройства класса, приложение может использовать один контекст устройства отображения для каждого окна, относящегося к указанному классу. Контексты устройства класса часто используются с окнами управления, которые рисуются с использованием одинаковых значений атрибутов. Как и контексты частных устройств, контексты устройств класса сокращают время, необходимое для подготовки контекста устройства к рисованию.
Система предоставляет контекст устройства класса для окна, если оно относится к классу окна с CS_CLASSDC стилем. Система создает контекст устройства при создании первого окна, относящегося к классу , а затем использует тот же контекст устройства для всех впоследствии созданных окон в классе . Изначально контекст устройства класса имеет те же значения по умолчанию для атрибутов, что и общий контекст устройства, но приложение может изменить их в любое время. Система сохраняет все изменения, кроме области обрезки и источника устройства, до тех пор, пока не будет уничтожено последнее окно в классе. Изменение, внесенное для одного окна, применяется ко всем окнам в этом классе.
Приложение может получить дескриптор в контексте устройства класса с помощью функции GetDC в любое время после создания первого окна. Приложение может сохранить и использовать дескриптор, не освобождая его, так как контекст устройства класса не является частью кэша контекста устройства отображения. Если приложение создает другое окно в том же классе окна, приложение должно снова получить контекст устройства класса. Получение контекста устройства задает правильный источник устройства и регион обрезки для нового окна. После того как приложение получает контекст устройства класса для нового окна в классе, контекст устройства больше не может использоваться для рисования в исходном окне без повторного извлечения его для этого окна. Как правило, при каждом рисовании в окне приложение должно явно получать контекст устройства класса для окна.
Приложения, использующие контексты устройства класса, должны всегда вызывать BeginPaint при обработке сообщения WM_PAINT . Функция задает правильный источник устройства и регион обрезки для окна, а также включает регион обновления. Приложение также должно вызвать EndPaint , чтобы восстановить курсор, если BeginPaint спрятал его. EndPaint не оказывает другого влияния на контекст устройства класса.
Система передает контекст устройства класса при отправке WM_ERASEBKGND сообщения в приложение, что позволяет текущим значениям атрибутов влиять на любой рисунок, выполняемый приложением или системой при обработке этого сообщения. Как и в случае с окном с частным контекстом устройства, приложение может использовать GetDCEx , чтобы система возвращала общий контекст устройства для окна, имеющего контекст устройства класса.
Не рекомендуется использовать контексты устройства класса.