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


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

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

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

Система автоматически настраивает контекст устройства, чтобы отобразить изменения в окне, такие как перемещение или установка размеров. Это гарантирует то, что любые перекрывающие окна всегда правильно обрезаются; то есть, не требуется какое-либо действие от приложения, чтобы гарантировать отсечение. Однако, система не пересматривает контекст устройства, чтобы включить в него регион обновления. По этой причине, обрабатывая сообщение WM_PAINT, приложение должно включить этот регион обновления или при помощи вызова функции BeginPaint, или извлекая регион обновления и частично перекрывая его с текущим регионом отсечения. Если приложение не вызывает BeginPaint, оно должно явно проверить достоверность региона обновления при помощи использования функции ValidateRect или ValidateRgn. Если приложение не проверяет достоверность региона обновления, окно получает бесконечный ряд сообщений WM_PAINT.

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

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

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

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

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

 

Hosted by uCoz