Fenster an ein anderes "anketten"
-
Hallo!
Mittlerweile habe ich einen großen Teil meiner Probleme lösen können, stehe aber noch vor genau einem und hoffe auf Hilfe. Ich habe ein transparentes Fenster welches ich über ein anderes positioniere. Jetzt möchte ich meins anketten, also wenn das andere Fenster minimiert wird, soll meins auch minimiert werden. Wenn das andere Fenster in den Hintergrund rutscht, weil ein ganz anderes drüber gelegt wurde, soll meins natürlich mit in den Hintergrund rücken, aber noch zum anderen Fenster gehören.
Hat jemand eine Lösung?
Wäre sehr nett!
Danke!
-
Klingt irgendwie so, als sollte das transparente Fenster ein Child-Fenster von dem anderen sein!
-
Ja...schon richtig. Aber wenn ich einfach ein Parent setze...mit ::SetParent(child,parent) kann es passieren das einzelne Childs des Parent-Fensters meine "überschreiben", also darüber legen.
Hat da jemand noch eine andere Idee?
-
WS_CLIPSIBLINGS im Parent setzen und (ganz wichtig) auf die Z-Order achten.
-
Z-Order? Also mit EnumWindows alle Unterhandles durchgehen und dann meins nach oben setzen?
Ginge es auch anders? Oder kann ich nicht einfach sagen das mein transparentes Parent ist und das fremde Fenster ein Child. Mein Fenster ist transparent und ist nicht in der Task-Leiste sichtbar.
Ich danke vielmals
-
Lies bitte was ich schreibe.
1. Wenn Fenster sich überlappen musst Du auf WS_CLIPSIBLINGS achten. Sonst gibt es keine Kontrolle was wen übermalt. Siehe auch WS_CLIPCHILDREN
2. Die Z-Order gibt an was zuletzt gezeichnet wird... Was willst Du da mit EnumWindows?
Mach Dich klug wie gezeichnet wird:
Das Fenster, das zuerst in der Z-Order steht bekommt den letzten WM_PAINT!
http://msdn.microsoft.com/en-us/library/ms534848(VS.85).aspx
-
Natürlich lese ich was du schreibst. Meine Frage ist wohl etwas zu kurz davor geraten. Es dreht sich jetzt eigentlich hauptsächlich darum wie SetWindowPos richtig verwendet wird. Schmeissen wir eifnach mal Parent weg. Ich erstelle einfach mein Fenster, größer als das Fenster welches ich überlappen möchte. Überlappen weil? Nun ja, ich möchte auch ca. 50 Pixel ausserhalb des Fenster meine Objekte noch sehen, deswegen fällt Parent weg. Meine Objekte wären ja sonst im Fenster "gefangen". Ich Create meinen Dialog, suche mir das fremde Fenster und möchte nun SetwindowPos richtig aufrufen um mein Fenster darüber zulegen. Konkrete Frage:
SetWindowPos(
HWND hWnd, // das fremde ?
HWND hWndInsertAfter, // meins?
int X,
int Y,
int cx,
int cy,
UINT uFlags // welche Parameter ?
);Und dann möchte ich noch herausfinden ob mein Fenster minimiert ist:
BOOL IsIconic(
HWND hWnd
);
wird wohl das richtige sein.Konkrete Frage:
In welcher Message muss ich SetwindowPos aufrufen? Also in meiner Anwendung, in welcher Message?
ich hoffe das geht besser.
Danke nochmal!
-
Dann ist die frage wohl wirklich doof

-
Nö doof nicht, aber für mich unverständlich., Erst redest Du von Child Windows dann nicht mehr. Das sind zwei verschiedene Szenarien. Was das ganze mit Deinem Topic zu tun hat ist mir nun gänzlich unklar.