Контексты устройства отображения класса


При помощи использования контекста устройства класса (class device context), приложение может использовать единый контекст устройства (DC) отображения для каждого окна, принадлежащего заданному классу. Контексты устройства класса часто используются окнами органов управления, которые рисуются, используя те же самые значения атрибутов. Как и частные контексты устройства, контексты устройства класса минимизируют время, требуемое для подготовки контекста устройства к рисованию.

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

Приложение может извлечь дескриптор контекста устройства класса при помощи использования функции GetDC в любое время после того, как было создано первое окно. Приложение может хранить и использовать дескриптор, не освобождая его, потому что контекст устройства класса не часть кэша контекста устройства (DC) отображения. Если приложение создает другое окно в том же самом классе окна, приложение должно извлечь контекст устройства класса снова. Извлечение контекста устройства устанавливает корректное начало координат устройства и регион отсечения для нового окна. После того, как приложение извлечет контекст устройства класса для нового окна в классе, контекст устройства больше не может использоваться, чтобы рисовать в исходном окне, вновь не извлекая его для этого окна. Вообще-то, каждый раз, когда контекст должен рисовать в окне, приложение должно явно извлечь контекст устройства класса для окна.

Приложения, которые используют контексты устройства класса, должны всегда вызывать BeginPaint, обрабатывая сообщение WM_PAINT. Функция устанавливает корректное начало координат устройства и регион отсечения для окна и включает регион обновления. Приложение должно также вызвать EndPaint, чтобы восстановить каретку (символ ">" или "|"), если функция BeginPaint скрыла его. EndPaint не имеет никакого другого влияния на контекст устройства класса.

Система передает контекст устройства класса, отправляя сообщение WM_ERASEBKGND приложению, давая возможность текущим значениям атрибутов оказать влиятьна любое рисование, выполняемое приложением или системой, в ходе обработки этого сообщения. Система снабжает контекст устройства окна сообщением WM_ICONERASEBKGND независимо от того, есть ли у соответствующего окна контекст устройства класса. Поскольку это может быть окном, имеющим частный контекст устройства, приложение может использовать функцию GetDCEx, чтобы заставить систему возвратить  общий контекст устройства для окна, у которого есть контекст устройства класса.

Использование контекстов устройства класса не рекомендуется.

Назад в оглавление
На главную страницу
Переведено 16.01.2011 21:40 ©Copyright V. Sokovikov

 

Hosted by uCoz