TOOLBAR und MDI Anwendung?? Hilfe!
-
Hallo!
Habe nach dem Beispiel http://www.germandevnet.de/html/faq/cpp/winapi/mdi.htm eine MDI Anwendung erstellt.
Jetzt habe ich mich drangesetzt, eine Toolbar in das MDI Projekt einzufügen.
Sodass ich dann oben eine "Toolbar" habe und im unteren Bereich die MDI Child Windows geöffnet werden können!
Ich schaff das leider nicht ....
das klappt irgendwie nicht man kann manchmal die toolbar nicch anklicken oder so .... ehmmm irgendwie müsste man doch den bereich des MDI FramWnd bestimmen können odeR? ich hab das gefühl, dass das FrameWnd über die toolbar gezeichnet wird. ich sollte also die größe des MDI Haupt wnd besitmmen können. oder habt ihr ein beispiel mit einer toolbar UND MDI wnd?????Danke im voraus!!!!
-
Hallo.
In Deiner Beispielanwendung ohne Toolbar, wird die Nachricht WM_SIZE nicht abgefangen. Das ist ja auch nicht nötig, da das MDI-Kontrollfenster den gesamten Client-Bereicht des Hauptfensters ausfüllt.
Dein Problem ist wie Du schon selbst gesagt hast, daß Dein Hauptfenster das MDI-Fenster und die Toolbar nicht ausrichtet, sondern sie stattdessen übereinander setzt.
Lange Rede, kurzer Sinn: Durch die Behandlung von WM_SIZE kannst Du dies in den Griff bekommen. Ich hab mir mit LCC eine MDI-Anwendung mit Toolbar und Statuszeile erzeugt. Das sieht dann wie folgt aus:case WM_SIZE: SendMessage(hWndStatusbar,msg,wParam,lParam); SendMessage(hwndToolBar,msg,wParam,lParam); InitializeStatusBar(hWndStatusbar,1); if (wParam != SIZE_MINIMIZED) { RECT rc, rcClient; GetClientRect(hwnd, &rcClient); GetWindowRect(hWndStatusbar, &rc); ScreenToClient(hwnd, (LPPOINT)&rc.left); rcClient.bottom = rc.top; GetWindowRect(hwndToolBar,&rc); rcClient.top = rc.bottom - rc.top; MoveWindow(hwndMDIClient,rcClient.left,rcClient.top,rcClient.right-rcClient.left, rcClient.bottom-rcClient.top, TRUE); }
Kurz zusammengefaßt wird hier der Client-Bereich des Hauptfensters ermittelt und der Bereich der Toolbar und der Statuszeile davon oben und unten "abgezogen". Was übrig bleibt ist dann der Platz für das MDI-Kontrollfenster.
....
John
-
also bei mir scheint das leider nicht zu klappen!!
... hTBWnd = CreateWindowEx(0, TOOLBARCLASSNAME, "", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hMainWnd, (HMENU)0, hInst, NULL); hWndFrame = CreateWindow("MDICLIENT", "", WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE, 200, 200, 50, 40, hWnd, (HMENU)NULL, hInst, &ccs); ... case WM_SIZE: { SendMessage(hTBWnd, message, wParam, lParam); if(wParam != SIZE_MINIMIZED) { RECT rc, rcClient; GetClientRect(hWnd, &rcClient); ScreenToClient(hWnd, (LPPOINT)&rc.left); rcClient.bottom = rc.top; GetWindowRect(hTBWnd, &rc); rcClient.top = rc.bottom - rc.top; MoveWindow(hWndFrame, rcClient.left, rcClient.top, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, true); } break; }
was könnte sein?
-
Hallo.
Nein, so kann das nicht funktionierenNochmal zum Verständnis:
Das MDI-Fenster soll den Clientbereich ausfüllen, der unterhalb der Toolbar beginnt. Dazu mußt Du die obere Kante des Client-Bereichs rcClient.top an die untere Kante der Toolbar rc.bottom anpassen. Eine Koordinatenanpassung ist in diesem Fall nicht nötig.InitCommonControls(); ... hTBWnd = CreateWindowEx(0, TOOLBARCLASSNAME, "", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hMainWnd, (HMENU)0, hInst, NULL); hWndFrame = CreateWindow("MDICLIENT", "", WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE, 200, 200, 50, 40, hWnd, (HMENU)NULL, hInst, &ccs); ... case WM_SIZE: SendMessage(hTBWnd,message,wParam,lParam); if (wParam != SIZE_MINIMIZED) { RECT rc, rcClient; GetClientRect(hwnd, &rcClient); GetWindowRect(hTBWnd,&rc); rcClient.top = rc.bottom - rc.top; MoveWindow(hwndFrame,rcClient.left,rcClient.top,rcClient.right-rcClient.left, rcClient.bottom-rcClient.top, TRUE); } return 0;
Das klappt. Hab's ausprobiert
....
John
-
jooooo jetzt funktioniert! du bist genial *freu*
dankeee!tschüss
frage: wie alt bist du? *G*