Я пытаюсь создать окно без полей, используя окно в стиле WS_EX_LAYERED.Цель состоит в том, чтобы визуализировать графику, используя DirectX, непосредственно на рабочем столе, используя альфа-канал для смешивания с текущими окнами рабочего стола.
Теперь в моей системе эта техника, кажется, работает идеально.Я могу установить различные альфа-уровни и достичь разных уровней прозрачности.К сожалению, некоторые пользователи сообщили о серьезных проблемах с производительностью и низкой частотой кадров, что делает эту технику непригодной для использования.
Настройка кода следующая:
- Создание многоуровневого ( WS_EX_LAYERED расширенный стиль).
- Инициализируйте DirectX с помощью окна HWND.
- Создайте цель рендеринга, используя CreateRenderTarget Метод DirectX.
Затем во время цикла рендеринга:
- Визуализация графики для цели рендеринга с использованием вызовов DirectX.
- Получение дескриптора HDC для целевой поверхности рендеринга DirectX с помощью GetDC method.
- Обновите содержимое окна с помощью функции UpdateLayeredWindow , указав поверхность DirectX HDC.
Мой вопрос: я что-то не так делаю?Есть ли способ улучшить производительность окна обновления.Я пробовал разные вещи, такие как блокировка цели рендеринга и ручное копирование битов в раздел DIB для отображения в области окна, но безуспешно.