2 Fenster bewegen
-
Nein kann ich nicht. Habe ich shon probiert. Ich kann zwar an ein anderes Fenster Message senden aber nicht an zwei gleichzeitig.
-
case WM_LBUTTONDOWN: ReleaseCapture(); SendMessage(hwnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); SendMessage(hwnd2, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); SendMessage(hwnd3, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); break;
Wieso sollte das nicht gehen???
-
Weiss ich auch nicht, probiere mal selbst aus es geht nicht, es wird irgendwie blockiert, es wird nur das erste Fenster bewegt.
-
kA, aber probier's mal mit PostMessage
-
Aja, ist doch klar, es wird nur das Fenster bewegt, das auch den Focus hat und die WM_MOUSEMOVE Nachricht bekommt. Diese kannst du an die anderen Fenster weiterleiten oder du fängst WM_MOVING ab und verschiebst die anderen Fenster selbst.
-
Geht auch nicht. Wahrscheinlich ist im Windows ein Schutzmechanismus eingebaut. Mann hat ja nur eine Maus.
-
Also WM_MOVING zu bearbeiten und die anderen Fenster mit SetWindowPos zu verschieben geht auf jeden Fall.
-
Moooment....
Also, wenn ICH meine mehrfenstrige Anwendung so verwalten wollte wie Winamp, dann würde ich, sobald ich die Message bekomme, das mein Fenster bewegt wird(!) bei jedem meiner Fenster das WindowRect checken (GetWindowRect()) und ihre Position zur momentanen Position meines Hauptfensters prüfen.
Beispiel (Nebenfenster soll rechts neben Haupfenster sein)RECT HauptRect, NebenRect; GetWindowRect(HauptFenster, &HauptRect); GetWindowRect(NebenFenster, &NebenRect); if((NebenRect.top!=HauptRect.top)||(HauptRect.left!=NebenRect.left-HauptRect.right)) { NebenRect.top = HauptRect.top; //Selbe Fensterhöhe NebenRect.left = HauptRect.right; //Rechts angeschmiegt MoveWindow(hNebenFenster, NebenRect.left, NebenRect.top, NebenRect.right, NebenRect.bottom, TRUE); //Jetzt sitzt es wieder Rechts neben dem Hauptfenster }
usw.
Ist nur ein Gedanke, hab's nicht geprüft, ob's so stimmt aber so ähnlich würde ich das machen...
[ Dieser Beitrag wurde am 14.05.2003 um 17:59 Uhr von Hepi editiert. ]
-
Oder so:
case WM_MOVING: SetWindowPos(hwnd2, 0, ((RECT*)lParam)->right, ((RECT*)lParam)->top, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER); return 0;
-
RESPEKT an "D@niel $chumann"
Und ein fettes Danke an alle, die mir geholfen haben.
Es funktioniert mit WM_MOVING.