2008-09-21 5 views
14

Ich habe ein Panel gemacht und es so eingestellt, dass es den Bildschirm ausfüllt. Jetzt kann ich die Fenster darunter sehen, aber ich möchte es durchklicken, was bedeutet, dass sie auf eine Datei klicken oder eine Werkzeugspitze eines anderen Objekts durch die Transparenz sehen können.Klicken Sie durch Transparenz für Visual C# -Fensterformulare?

RE: Dies kann zu offensichtlich sein, aber haben Sie versucht, das Panel auf der Rückseite mit einem rechten Mausklick das Senden und wählen Sie „In den Hintergrund“?

meine ich wie der Desktop oder firefox, nicht etwas in meinem Projekt.

Antwort

21

Das Erstellen eines Formulars der obersten Ebene, das transparent ist, ist sehr einfach. Füllen Sie einfach den Bildschirm oder den gewünschten Bereich aus und definieren Sie ihn so, dass eine TransparenzKey-Farbe und eine BackColor mit demselben Wert erhalten werden.

Es ist einfach genug, es zu ignorieren, die Maus zu ignorieren, Sie müssen einfach das WndProc überschreiben und WM_HITTEST sagen, dass alle Mauspositionen als transparent behandelt werden sollen. Dadurch wird die Maus mit dem interagieren, was sich unter dem Fenster befindet. So etwas wie ...

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

Wohin mit dem Code? Wenn ich es unter InitializeCoponets einsetze, hat es nicht funktioniert. Ich habe mich sogar einmal angerufen. – Hooch

+0

Legen Sie in der Formularklasse. Übrigens, WM_NCHITTEST = 0x84 und HTTRANSPARENT = -1. Es klappt!!! : D – Pedro77

+1

Seltsamerweise funktionierte das nicht für mich in Win8 mit einem [layered] (http://msdn.microsoft.com/en-us/library/ms997507.aspx) Fenster: Hover würde durchlaufen, aber Klicks würden aktiviert werden mein Fenster statt durch zu gehen. Was stattdessen funktionierte, war [WS_EX_TRANSPARENT] setzen (http://stackoverflow.com/a/2798294/33080). –