ID2D1HwndRenderTarget всегда имеет черный фон вместо прозрачного

Я пытаюсь создать простое прозрачное окно, в котором я могу рисовать с помощью Direct2D.

Пока что я сделал:

  1. Созданное окно
  2. Установить стиль на WS_EX_LAYERED
  3. Установите альфа-цветовой ключ как #FFF
  4. Нарисуйте с помощью графики Windows белый прямоугольник
  5. Теперь окно прозрачное с попиксельной альфой
  6. Then make a target out of the window and draw using Direct2D
    • Make ALPHA _PREMULIPLIED target
    • Очистить с помощью #FFF с альфа 0,0f
  7. Окно теперь черное

Я просто не знаю, как сделать окно прозрачным. Если вы можете указать на мою ошибку, я буду признателен


person Mathew Kurian    schedule 16.09.2013    source источник


Ответы (2)


Я не думаю, что это возможно с DirectX. Однако GDI действительно работает.

Взгляните на источник здесь, чтобы узнать, как это делается: http://pastebin.com/NJf8wi2V

В источнике вы можете увидеть, что есть возможность попытаться использовать directx / opengl. Однако, как видно из бега, они не работают.

person user1052842    schedule 17.09.2013
comment
Спасибо за подтверждение. Я пошел дальше и вместо этого использовал GDI - person Mathew Kurian; 18.09.2013

Вот как это можно сделать с помощью DirectComposition API

Русский: http://www.oszone.net/25395/

Английский: https://msdn.microsoft.com/magazine/dn745861.aspx

В основном то, что делает автор,

  1. Устанавливает расширенный стиль WS_EX_NOREDIRECTIONBITMAP для удаления растрового изображения перенаправления DWM. Содержимое окна теперь пусто.

  2. Создает устройство DirectComposition

  3. Создает Composition SwapChain (а ​​не hwnd swapchain)

  4. Помещает один визуал с SwapChain в качестве содержимого в качестве корневого визуала.

  5. Рендеринг в SwapChain с использованием Direct2D API.

Он также хорошо работает с WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_TOPMOST для создания прозрачных для событий наложений.

person Oleh Nechytailo    schedule 28.01.2016