2009-09-02 9 views
0

J'ai un CDHTMLDialog dans un BHO que je veux être partiellement transparent, dans le sens où la zone transparente change selon la logique du dialogue. Je l'ai obtenu pour devenir transparent visuellement (en utilisant SetLayeredWindowAttributes), mais il est essentiel de rendre cette région vraiment transparente, car sinon je clique sur la région transparente mes clics n'atteignent pas la fenêtre IE qui est en dessous de la partie transparente de mon dialogue. Je corrige temporairement ceci en redimensionnant constamment mon dialogue en fonction de la taille de la partie active de la boîte de dialogue, mais je n'arrive pas à la suivre pour toujours ...Régions Windows et transparence

Je pense que la solution a quelque chose à voir avec ce que Windows appelle "régions" (http://msdn.microsoft.com/en-us/library/dd162915%28VS.85%29.aspx) mais je ne sais pas exactement comment travailler avec eux. Est-ce que quelqu'un peut-il me montrer la bonne direction?

Répondre

0

j'ai trouvé le moyen de rendre transparente une fenêtre entière et cliquer par ici:

http://www.codeproject.com/KB/wtl/transparent.aspx

Mais ce n'est pas utile pour mon cas où je ne veux que la partie transparente de ma fenêtre (transparent par HTML Mise à jour: Apparemment, les clics sont censés passer par les parties transparentes (voir http://jalaj.net/2007/02/05/form-with-a-hole/), mais pas dans mon CDHTMLDialog. Ma meilleure supposition est qu'une sous-fenêtre de la BHO attrape mes clics, mais je ne pense pas vraiment que cela ait beaucoup de sens ...

2

Je ne pense pas que vous souhaitiez rendre transparentes des parties de votre fenêtre. vous voulez faire est (je pense) définir la région de la fenêtre (comme vous le mentionnez). Lisez le MSDN sur SetWindowRgn() - vous définissez fondamentalement un objet GDI de type HRGN (si vous utilisez MFC, CRgn) qui décrit une surface d'une certaine forme, et éventuellement avec des parties découpées. Windows considère ensuite uniquement la 'région' que vous définissez dans une fenêtre comme partie de la fenêtre à utiliser. Fondamentalement, c'est comment vous faites des fenêtres non rectangulaires. Une 'région' n'est pas une partie 'transparente' d'une fenêtre, c'est un moyen de supprimer les zones d'une fenêtre, d'une certaine manière.

+0

Semble raisonnable, bien que cela nécessite que je sache à l'avance quelles parties de la fenêtre sont transparentes. Mon problème principal est que son HTML dynamique et les parties transparentes de celui-ci changent sans la connaissance du BHO. –

+1

Oh je vois maintenant, ouais ça le rend difficile. En fait, je ne pense pas que ce soit possible du tout. Avez-vous un moyen de savoir quand l'utilisateur clique, et quand il le fait si c'était sur une partie transparente? Si c'est le cas, vous pouvez juste transférer le WM_LBUTTONDOWN et les autres messages de la souris à la fenêtre parente. – Roel

Questions connexes