ID2D1HwndRenderTarget ayant toujours un fond noir au lieu de transparent

J’essaie de créer une simple fenêtre transparente dans laquelle je peux dessiner avec Direct2D.

Jusqu’ici ce que j’ai fait:

  1. Fenêtre créée
  2. Définissez le style sur WS_EX_LAYERED
  3. Définir la clé de couleur alpha sur #FFF
  4. Dessinez avec Windows Graphics un rectangle blanc
  5. Maintenant, la fenêtre est transparente avec alpha par pixel
  6. Puis créez une cible à partir de la fenêtre et dessinez avec Direct2D
    • Faire de la cible ALPHA _PREMULIPLIED
    • Effacer avec #FFF avec 0.0f alpha
  7. La fenêtre est maintenant noire

Je ne sais tout simplement pas comment faire de la fenêtre transparente. Si vous pouvez signaler mon erreur, je serais obligé

Je ne pense pas que ce soit possible avec DirectX. Cependant, le GDI fonctionne.

Jetez un oeil à la source ici pour voir comment cela se passe: http://pastebin.com/NJf8wi2V

Dans la source, vous pouvez voir qu’il existe une option pour essayer d’utiliser directx / opengl. Cependant, comme vous pouvez le constater en cours d’exécution, ils ne fonctionnent pas.

Voici comment cela est réalisable en utilisant l’API DirectComposition

Russe: http://www.oszone.net/25395/

Anglais: https://msdn.microsoft.com/magazine/dn745861.aspx

Fondamentalement, ce que fait l’auteur est

  1. Définit le style étendu WS_EX_NOREDIRECTIONBITMAP pour supprimer le bitmap de redirection de DWM. Le contenu de la fenêtre est maintenant vide.

  2. Crée le périphérique DirectComposition

  3. Crée Composition SwapChain (et non hwnd swapchain)

  4. Place un visuel avec SwapChain en tant que contenu en tant que visuel racine.

  5. Restitue dans SwapChain à l’aide de l’API Direct2D.

Cela fonctionne également bien avec WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_TOPMOST WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_TOPMOST WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_TOPMOST pour la création de superpositions transparentes aux événements.