WinApi - welche Fenster überlappen / welches liegt vorne?
-
Hallo,
ich benutze die Winapi-Funktionen
EnumWindowsund
GetWindowRectum alle offenen Fenster auszulesen und deren Postionen verarbeiten
zu können.Meine Frage: Wie kann ich herausfinden welche Fenster überlappen bzw.
ob ein sich Fenster hinter einem anderen befindet? (Klar, anhand der durch
"GetWindowRect" ausgelesenen Koordinaten. Nur welches liegt dann vor dem anderen?)ich hoffe ihr versteht was ich meine

danke, babel
-
Überlappung kannst du herausfinden, indem du die Fensterlage miteinander vergleichst (IntersectRect()). Für die Frage, welches Fenster vorne ist, mußt du die z-Order auswerten. (wie man da dran kommt, bin ich nicht sicher, aber mit GetTopWindow()/GetNextWindow() kannst du die Fenster in fallender z-Order auslesen)
-
Damit ich jetzt keinen neuen Thread auf mache.
Kann man denn auch auf die gleiche Art und Weise die Z-Order der Fenster "setzen"?
Ich häng hier die ganze Zeit, und schlag mich mit SetWindowPos rum, mit dieser Funktion gibt es derbste Probleme und es funktioniert nicht richtig. Am liebsten würde ich die Z-Order selber ohne diese Funktion anordnen können, geht das irgendwie?
-
Nein - SetWindowPos() ist der einzige (mir bekannte) Weg, um die z-Order anzupassen - du übergibst der Funktion die Adresse/Handle des Fensters, hinter dem du es anordnen willst.
Was hast du denn bislang versucht?
-
Nunja, ich möchte gerne ein "nicht aktiviertes" über ein anderes setzen (welches sich gerade ganz vorne befindet).
Um mal ein Beispiel zu schreiben: Ich habe ein Notepad - Fenster und ein eigenes Fenster mit eigenen Sachen drauf. Jetzt möchte ich mein Fenster über dem Notepad - Fenster anzeigen, dabei soll das Notepad allerdings 1. aktiv bleiben und 2. darf mein eigenes Fenster NICHT ON_TOPMOST, also nur ON_TOP sein, damit das Fenster unter den ganzen ON_TOPMOST Fenstern angezeigt wird.
Wenn ich schreibe:SetWindowPos(hwndMeinesFensters,HWND_TOP,[RectMeinesFensters],0) dann ist das Fenster dennoch hinter dem Notepad - Fenster, also hat der Befehl 0 % bewirkt und ich frage mich ernsthaft, wozu man diesen Befehl erfunden hat, wenn dieser nicht mal funktioniert, sorry x.x
Mein Eigenes Fenster wird erst vor dem Notepad - Fenster angezeigt, wenn ich mit dem Maus dieses Fenster unten in der Programmleiste anklicke und es dadurch aktiviert wird, ich brauch es aber über dem Fenster ohne Mausklicks, also automatisiert. Die Schwierigkeit dabei ist, dass gewährleistet sein muss, dass mein Fenster immer über einem speziellen Fenster angezeigt ist, wenn dieses aktiviert wird und auch "immer" in der Z-ORDER "genau" eine Ebene über diesem Fenster liegt (hier halt das Beispiel mit dem Notepad Fenster). Also soll es "immer" hinter TOPMOST Fenster angezeigt werden, aber auch immer genau über dem Fenster, was gerade vorne liegt.
Stell dir das so vor: Ich will einfach mein Fenster zwischen TOP und TOPMOST platzieren, geht das?
Wäre nett, wenn ich mal eine Lösung bekommen könnte xD