Рекомендации и рекомендации по производительности
В этом разделе представлен набор рекомендаций по использованию API Диспетчера окон рабочего стола (DWM).
Этот раздел состоит из следующих подразделов.
- Практические рекомендации по приложениям для DWM
- Методики рисования для DWM
- Регион клиента Blur-Behind DWM
Практические рекомендации по приложениям для DWM
Если приложение обрабатывает масштабирование точек на дюйм (точек на дюйм), вы можете объявить приложение как поддерживающее dpi и предотвратить автоматическое масштабирование, установив флаг с поддержкой dpi в манифесте программы или вызвав функцию SetProcessDPIAware во время инициализации программы.
Если композиция DWM включена, незащищенные приложения больше не получают WM_PAINT сообщений и не получают запрос на повторную отрисовку. Содержимое каждого окна уже доступно для создания изображения экрана.
Окна WS_EX_TRANSPARENT верхнего уровня должны сочетаться с WS_EX_LAYERED стилем для целей проверки нажатия. WS_EX_TRANSPARENT в классическом смысле без перенаправления, полезно для дочерних окон в иерархии окон, принадлежащих одному потоку, но не предназначенных для окон верхнего уровня.
Используйте области или слои для создания формированных или смешанных окон. Обратите внимание, что в Windows Vista и более поздних версиях Windows настраиваемое рисование только части окна верхнего уровня не предоставляет требуемое устаревшее содержимое в неотрисованных регионах.
Такие API, как GetDCOrgEx , можно использовать для определения определенных фактических значений. Если у вас есть контекст устройства (DC) для перенаправленного окна, источник, возвращенный GetDCOrgEx , не будет соответствовать источнику окна на экране. Вместо этого источник будет источником задней буферной поверхности для окна: (0, 0).
Если все остальное не удается, отключите отрисовку окна, вызвав функцию DwmSetWindowAttribute .
Методики рисования для DWM
Избегайте рисования непосредственно на основной поверхности дисплея. Это приведет к отключению композиции DWM до тех пор, пока приложение не выпустит основную поверхность устройства.
Оцените, должно ли приложение предоставлять собственную двойную буферизацию. DWM фактически удвоит содержимое и представляет окно в одном кадре.
Избегайте чтения или записи на дисплее контроллера домена. Хотя он поддерживается DWM, мы не рекомендуем использовать его из-за снижения производительности.
Избегайте рисования в не клиентской области. Хотя приложение может получить доступ к этой области, а рисование поддерживается API Microsoft Win32, это может привести к потере любой стеклянной границы окна.
Избегайте смешивания интерфейса графических устройств Windows (GDI) и Microsoft DirectX, если они не перекрываются. Если требуется смешивание, нарисуйте содержимое GDI в области программного обеспечения DirectX и объедините его перед созданием на экране, либо нарисуйте их в отдельных окнах.
Используйте функцию BitBlt или StretchBlt вместо Windows GDI+, чтобы представить документ для отрисовки. GDI+ отрисовывает по одной строке сканирования за раз с помощью программной отрисовки. Это может вызвать мерцание в приложениях.
Регион клиента Blur-Behind DWM
Отрисовка эффекта размытия является ресурсоемкой операцией как для ЦП, так и для графического процессора (GPU). Разработчикам приложений настоятельно рекомендуется учитывать последствия использования размытия клиентской области, чтобы не потреблять лишние ресурсы. Следует соблюдать особую осторожность в следующих случаях:
- Если предполагается, что размер размытия клиентской области будет значительным, даже если в самой размытой области не будет происходить обновлений. Размытие должно быть отрисовывается на случай, если какие-либо обновления происходят в размытой области окна, что приводит к затратам на ЦП и GPU. Кроме того, операции с окном (перемещение, изменение размера и переходы) повлечет за собой дополнительные затраты.
- При ожидании значительных обновлений в размытой клиентской области. Для этого потребуется перекраска размытия при каждом обновлении и чрезмерное потребление ресурсов.
- Если предполагается, что размытие будет охватывать значительную область и обновления этой области также ожидаются, настоятельно рекомендуется не размывать клиентную область.