WinApi WS_EX_TRANSPARENT und rückgängig
-
Hallo zusammen,
ich schreibe gerade eine WPF-Anwendung und will dabei auf die WinApi zurückgreifen! Damit möchte ich das Fenster Transparent setzen das funktioniert auch damit:
IntPtr hwnd = new WindowInteropHelper(this).Handle; // Change the extended window style to include WS_EX_TRANSPARENT int extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE); SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT);
Nun möchte ich das aber wieder zurücksetzen! Wie funktioniert das?
Habe schon versucht den "extendedstyle" zu speichern und dann( SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle)
zu machen aber das funktioniert nicht!
Kann mir jemand helfen. Vielen Dank im Voraus!
MfG
WPFUser0107
-
Ich denke, du suchst eher nach WS_EX_LAYERED - beim Erstellen setzen und per SetLayeredWindowAttributes die Transparenz ändern:
SetLayeredWindowAttributes(hwnd, 0, 0x80, LWA_ALPHA); // halb transparent ... SetLayeredWindowAttributes(hwnd, 0, 0xFF, LWA_ALPHA); // opaque
-
Sorry vielleicht hätte ich mich besser ausdrücken sollen! Also das "Transparent" machen funktioniert so (siehe oben genannter Code)! Ich möchte ja, dass die Elemente weiter angezeigt werden, aber die Klicks sollen durch die Controls gehen und dann auch das darunter liegende Fenster bzw. button aktivieren. Deswegen brauch ich das! Aber bei manchen Controls soll er das nicht machen deswegen muss ich das wieder rückgängig machen bei einer bestimmten Bedingung.
-
Es ist imho keine gute Idee, Controls zu überlagern. Bessere einfach dein Design aus.
-
So etwas kann man machen, in dem man dem Fenster entsprechende Styles "wegnimmt". Ich weiß nicht, ob das auch mit TRANSPARENT funktioniert, kannst aber mal versuchen. Hier ist der Ansatz:
long extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE); extendedStyle &= ~(WS_EX_TRANSPARENT); SetWindowLong (hwnd, GWL_EXSTYLE, extendedStyle);