WS_POPUPWINDOW und HOLLOW_BRUSH
-
ich möchte ein WS_POPUPWINDOW mit transparenten hintergrund haben.
Leider bleibt der hintergrund weiss, wenn ich als backround GetStockObject(HOLLOW_BRUSH); eingebe.Mach ich was falsch oder funktioniert diese kombi garnicht
und gibt es da noch andere möglichkeiten?
-
So bekommt man kein transparentes Fenster!
Grundsätzlichist ein Fenster erst einmal nie durchssichtig und wird dies auch nicht durch GDI Attribute. Dann müsste Windows für jedes Fenser immer alles darunterliegende zuerst ermitteln und zeichnen. Das würde viel zu lange dauern und wäre ja nur "eine Ausnahme" von der Regel.Siehe MSDN Layered Windows:
http://msdn.microsoft.com/en-us/library/ms997507.aspxAnsonsten kann man auch mancmal komplette Durchsichtigkeit erreichen, wenn man auf WM_ERASEBKGND direkt TRUE zurückgibt. Allerdigs werden dann dennoch Veränderungen unter dem Fenster nicht mehr aktualisiert.
-
Hey danke.. Klappt. Nur bei Dev C++ gibtsn Problem mit LWA_ALPHA.
Wie kann ich das declarieren?bei visual c++ gehts perfekt.
-
und ausserdem ist jetzt das ganze fenster durchsichtig und ich möchte nur, das der hintergrund im anwendungsbereich durchsichtig ist.
bist jetzt siehts so aus:
SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED); SetLayeredWindowAttributes(hWnd, 0, 50, LWA_ALPHA);
-
Layered Windows funktionieren nur für Popup Fenster.
Lies die Doku!Was hast Du bitte vor?
Warum soll ausgerechnet in meinem Anwendungsbereich etwas druchsichtig sein?
-
ich möchte nur das der hintergrund durchsichtig ist.
alles was darauf gezeichnet wird nicht. wie zum beispiel Rechtecke oder Buttons.nur wird mit diesem Befehl alles Transparent.
-
Dann erzeuge Dein Fenster uns sorge dafür, dass WM_ERASEBKGND nichts macht.
Allerdings wird Dein Fenster "nicht wirklich" transparent. Du löscht nur nicht was an der Stelle liegt an der nun Dein fenster ist.
D.h. würde in dem darunter liegenden Fenster eine Uhr laufen, wäre diese in dem Moment eingefroren.
-
nicht schlimm das es "nicht wirklich" transparent ist.
aba das mit dem WM_ERASEBKND bekomm ich alleine nicht hin
srykann mir einer helfen?