Ich erstelle, was eine sehr einfache Win32 C++ - Anwendung sein sollte, die nur dazu dient, nur ein halbtransparentes PNG anzuzeigen. Das Fenster sollte kein Chrom haben und die gesamte Opazität sollte im PNG selbst kontrolliert werden.Ein transparentes Fenster in C++ erstellen Win32
Mein Problem ist, dass das Fenster nicht neu erstellt, wenn der Inhalt unter dem Fenster ändert, so dass die transparenten Bereiche des PNG "stecken" mit, was unter dem Fenster war, als die Anwendung gestartet wurde.
Hier ist die Linie, wo ich ein Setup das neue Fenster:
hWnd = CreateWindowEx(WS_EX_TOPMOST, szWindowClass, szTitle, WS_POPUP, 0, height/2 - 20, 40, 102, NULL, NULL, hInstance, 0);
Für den Aufruf zu RegisterClassEx, ich habe diesen Satz für den Hintergrund:
wcex.hbrBackground = (HBRUSH)0;
Hier ist mein Handler für WM_PAINT Nachricht:
Eine Sache zu beachten ist, dass die Anwendung immer links von t angedockt ist er screen und bewegt sich nicht. Aber was sich unterhalb der Anwendung befindet, kann sich ändern, wenn der Benutzer Fenster darunter öffnet, schließt oder bewegt.
Wenn die Anwendung zum ersten Mal gestartet wird, sieht sie perfekt aus. Die transparenten (und ähnlich transparenten) Teile des PNG zeigen sich perfekt. ABER, wenn sich der Hintergrund unter der Anwendung ändert, wird der Hintergrund NICHT aktualisiert, sondern bleibt gleich, wenn die Anwendung gestartet wurde. Tatsächlich wird WM_PAINT (oder WM_ERASEBKGND nicht aufgerufen, wenn sich der Hintergrund ändert).
Ich spiele schon eine ganze Weile damit und bin fast 100% richtig, aber nicht ganz da. Zum Beispiel habe ich versucht, den Hintergrund auf (HBRUSH) NULL_BRUSH zu setzen und ich habe versucht, WM_ERASEBKGND zu behandeln.
Was kann getan werden, um das Fenster neu zu streichen, wenn sich der Inhalt darunter ändert?
SetBkMode und SetBkColor sind die APIs ich verwendet habe, die transparente geordnete Steuerung zu machen. –