2010-05-09 4 views
5

J'ai créé un formulaire semi-transparent. Je voudrais que les gens puissent cliquer sur la zone de formulaire et que le formulaire ne gère pas le clic. J'aimerais que tout ce qui se trouve sous le formulaire reçoive l'événement click à la place.Clic en forme C#

+0

duplication possible de [Cliquez sur transparence pour Visual C# Window Forms?] (Http://stackoverflow.com/questions/112224/click-through-transparency-for-visual-c-window-forms) – Joey

+0

Ce qui va dessous la forme? – Ikaso

Répondre

3

Vous pouvez le faire avec SetWindowLong:

int initialStyle = GetWindowLong(this.Handle, -20); 
SetWindowLong(this.Handle, -20, initialStyle | 0x80000 | 0x20); 

Il y a quelques chiffres magiques ici:

  • -20 - GWL_EXSTYLE

    Récupère les styles de fenêtre étendue.

  • 0x80000 - WS_EX_LAYERED

    Crée un layered window.

  • 0x20 - WS_EX_TRANSPARENT

    Indique qu'une fenêtre créée avec ce style ne doit pas être peint jusqu'à ce que les frères et sœurs sous la fenêtre (qui ont été créés par le même fil) ont été peints. La fenêtre apparaît transparente car les bits des fenêtres sous-jacentes ont déjà été peints.

Il existe de nombreux articles sur tout le web sur la façon de le faire, comme this one.