2008-09-21 5 views
14

J'ai créé un panneau et je l'ai configuré pour remplir l'écran, maintenant je peux voir les fenêtres en dessous, mais je veux qu'il soit cliqué, ce qui signifie qu'il peut cliquer sur un fichier ou voir une info-bulle à travers la transparence.Cliquez sur la transparence pour les formulaires de fenêtre Visual C#?

RE: Cela peut être trop évident, mais avez-vous essayé d'envoyer le panneau à l'arrière par un clic droit et en choisissant « Arrière-plan »?

Je veux dire comme le bureau ou Firefox, pas quelque chose dans mon projet.

Répondre

21

La création d'un formulaire de niveau transparent est très simple. Faites-le simplement remplir l'écran, ou la zone requise, et définissez-le pour avoir une couleur TransparenyKey et BackColor de la même valeur. Le fait d'ignorer la souris est assez simple, il suffit de remplacer le WndProc et de dire à WM_HITTEST que toutes les positions de la souris doivent être traitées comme transparentes. Ainsi, la souris interagit avec tout ce qui se passe sous la fenêtre. Quelque chose comme ça ...

protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == (int)WM_NCHITTEST) 
      m.Result = (IntPtr)HTTRANSPARENT; 
     else 
      base.WndProc(ref m); 
    } 
+1

Où mettre ce code? Quand je l'ai mis sous InitializeCoponets cela n'a pas fonctionné. Je n'ai même pas appelé une fois. – Hooch

+0

Mettez à la classe de formulaire. Par ailleurs, WM_NCHITTEST = 0x84 et HTTRANSPARENT = -1. Ça marche!!! : D – Pedro77

+1

Curieusement, cela n'a pas fonctionné pour moi dans Win8 en utilisant une fenêtre [layered] (http://msdn.microsoft.com/en-us/library/ms997507.aspx): les pointeurs passeraient, mais les clics seraient activés ma fenêtre au lieu de passer par. Ce qui fonctionnait à la place était de [définir WS_EX_TRANSPARENT] (http://stackoverflow.com/a/2798294/33080). –

Questions connexes