Fenster
-
Hallo,
wenn ein Fenster über ein anderes bewegt wird, welche botschaft erhält das untere Fenster um die wieder sichtbaren Teile neu zu zeichnen?
Also genauer: Wie kann ich solch eine Botschaft selbst senden und wie finde ich alle Fenster?
-
Wannimmer Windows es für nötig sieht Teile eines Fensters neu zu zeichnen,also z.b. nach einer freigelegten Verdeckung, schickt es eine WM_PAINT Message an dieses Fenster.
Möchtest du nicht den ganzen Fensterinhalt neu zeichnen, sondern nur das, was wirklich nötig ist, kannst du nach dem Bildauschnitt mit GetUpdateRect fragen.
Willst du dem Fenster mitteilen, dass sein Inhalt ungültig ist und es sich neu zeichnen soll, kannst du das mit den Funktionen : InvalidateRect und UpdateWindow.
Und die vorhandenen Fenster kriegst du mit EnumWindows bzw. EnumChildWindows.
-
Und wie sende ich solch eine Nachricht (z.B. an den Desktop)
-
SendMessage(...)
Der Desktop ist ein Fenster, wie jedes andere auch, nur ohne Titelleiste und Rahmen.
Allerdings ist WM_PAINT keine NAchricht, die dazu gedacht ist, von einer Anwendung gesendet zu werden.Stattdessen sollten die Fenster sozusagen danach lauschen, ob sie ihren Inhalt erneut zeichen müssen.
-
Ich habs so probiert:
SendMessage(GetDesktopWindow(),WM_PAINT,0,0);
aber es passiert nix, denn ich hab einmal zur probe einmal was auf den desktop gezeichnet, aber das bleibt dort stehen!
-
RedrawWindow -> MSDN
-
hallo, ich habe jetzt
RedrawWindow(GetDesktopWindow(),NULL,NULL,RDW_INVALIDATE|RDW_ERASENOW|RDW_FRAME);
versucht, doch es passiert nichts
-
hWnd
[in] Handle to the window to be redrawn. If this parameter is NULL, the desktop window is updated.Also versuch mal NULL anstelle von GetDesktopWindow()
-
Jetzt hab ichs man muss es so machen :
InvalidateRect(NULL, NULL, TRUE); RedrawWindow(NULL,NULL,NULL,RDW_INVALIDATE|RDW_ERASENOW|RDW_FRAME);