"Desktop anzeigen" - welche Meldung bekommt mein Fenster?
-
Hallo z'sammen,
folgendes hat mich schon durch die MSDN getrieben:Wenn der Benutzer auf diesen niedlichen Taskbarbutton "Desktop anzeigen" drückt, dann werden ja alle Fenster erstmal "versteckt".
Schon da habe ich versucht alles mögliche an WM_-Nachrichten abzufangen, aber keine war es.
Viel schlimmer ist aber, wenn ich dann meine Anwendung unten in der Leiste anklicke, wird das Fenster zwar wieder angezeigt, aber der Clientbereich ist ziemlich verhunzt. Das legt sich zwar, sobald man irgendein anderes Fenster mal kurz drüber fegt, aber eigentlich sieht es erstmal blöd aus.
Die einzige Nachricht, die ich bekommen habe, war "WM_WINDOWPOSCHANGED". Dort habe ich dann eingefügt:
Invalidate(); UpdateWindow();
Beim ersten Versuch ... hey, es klappt.
Direkt nochmal "Desktop anzeigen" - Anwendungsbutton im Taskbar anklicken ... wieder Anzeige hin.
Weiss einer von Euch vielleicht, wie ich das hinkriege. Vielleicht, welche Nachricht das ist, die ich da abfangen könnte?
Viele Grüsse,
Qweety.
-
Hallo,
Windows sendet Dir WM_SYSCOMMAND.
Du kannst also CWnd::OnSysCommand(UINT nID, LPARAM lParam) überschreiben
und dann darauf reagieren.nID ist z.B. SC_MAXIMIZE oder SC_MINIMIZE (mehr s. MSDN)
Gruss
EB
-
Hi EB,
habe OnSysCommand für mein Dialogfenster eingebaut, aber irgendwie wird's bei der Gelegenheit nicht aufgerufen.Auch Spy++ meldet diese Nachricht nicht.
Der Zeichenfehler scheint aber dadurch zu kommen, dass WM_ERASEBKGND aufgerufen wird, aber anschliessend kommt kein WM_PAINT.
Dummerweise werden die dabei überlappenden Statics nacheinander zum Hintergrundlöschen animiert, aber in der falschen Reihenfolge, so dass die von einem Element überzeichnete Kante durch das EraseBackground des nächsten Elements dann sichtbar wird.
Invalidate(FALSE) in OnEraseBkgnd führt dann aber wiederum dazu, dass sich die Anwendung aufhängt (wahrscheinlich eine Newbie-Verirrung meinerseits, es überhaupt so zu versuchen
).
Habe mir jetzt beholfen, in dem ich den Überlappungsbereich einfach von beiden Elementen überzeichnen lasse. Jetzt sieht es so aus, wie's soll.
Aber so ganz geschnallt, wer da wo welchen Nachrichten benutzt, habe ich leider auch nicht.
Aber danke für Deine Antwort
, auch wenn's nicht funktioniert hat.
Gruss,
Qweety.