Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 курс / Лекции / Лекция 9.pptx
Скачиваний:
42
Добавлен:
18.02.2023
Размер:
149.03 Кб
Скачать

Частные контексты

Частный контекст устройства (private device context )

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

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

существования окна или до тех пор, пока приложение не сделает

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

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

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

Контексты класса

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

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

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

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

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

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

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

Оконные контексты

Контекст устройства окна (window device context)

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

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

Стили класса CS_OWNDC и CS_CLASSDC не оказывают влияния на контекст устройства.

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

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

Родительские контексты

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

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

Значения атрибутов, установленных родительским окном, не сохраняются для дочернего окна; например, родительское окно не может установить кисть для своих дочерних окон. Единственным сохраняемым свойством является регион отсечения. Окно должно обрезать свой собственный вывод данных руководствуясь пределами окна. Поскольку регион отсечения для родительского контекста устройства идентичен родительскому окну, дочернее окно потенциально может рисовать поверх всего родительского окна, но родительский контекст устройства не должен использоваться таким образом.

Система игнорирует стиль CS_PARENTDC, если родительское окно использует частный контекст устройства или контекст устройства класса, если родительское окно обрезает свои дочерние окна, или если дочернее окно обрезает свои дочерние окна или порожденные окна.

Растровые изображения

Растровые изображения — это блоки пиксельных данных, которые могут быть выведены непосредственно на устройство, такое как видеодисплей. Их можно также рассматривать как средство записи пиксельных данных непосредственно с экрана в буфер памяти.

Вывод растровых изображений на экран происходит намного быстрее по сравнению с выводом с использованием таких функций GDI, как Rectangle и LineТо.

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

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

В Windows предусмотрены два типа растровых изображений: аппаратно-зависимое растровое изображение (DDB — device-dependent bitmap) и

аппаратно-независимое растровое изображение (DIB — device-independent bitmap).

Аппаратно-зависимое растровое изображение — это более старый формат и, как показывает само его название, он является менее гибким по сравнению с форматом аппаратно-независимого растрового изображения.