Größe / Position eines TabControls ändern
-
Hallo an alle.
Also ich habe in meinem Programm ein Einstellungsfenster, das aus einem TabControl mit drei Tabs, dessen Inhalt aus Dialogen aus Resourcen erstellt wird, und einem OK Button bestehen soll. Jetzt habe ich das Problem, das das TabControl immer das gesamte Fenster ausfüllt. Das heißt ich kann kein Button mehr unter das TabControl setzen. Eine Angabe von Höhe und Breite bringt nichts.
Ich hatte dann die Idee das TabControl auf ein static zu setzen, mit dem ich dann die Größe begrenze. Wenn ich das mache, wird aber nur das erste Tab angezeigt, ohne Tableiste.
So wird mein static und mein TabControl erzeugt:
HWND hwndtabwnd, hwndtab; hwndtabwnd = CreateWindow("static",NULL,WS_CHILD | WS_VISIBLE, 5, 5, 240, 190, hwndeinst, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL); hwndtab = CreateWindow(WC_TABCONTROL, TEXT(""), WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPSIBLINGS | TCS_FOCUSNEVER | TCS_SINGLELINE, 0, 0, 0, 0, hwndtabwnd, (HMENU)tab, ((LPCREATESTRUCT)lParam)->hInstance, NULL);Ich hoffe mir kann da jemand helfen. Wenn es schon mal so ein Thema gab, bin ich auch für den Link dorthin dankbar. Ich habe nämlich nichts gefunden.
Jan
-
1. Erzeugst Du Dein Tab Control ohne Größe. An dem Code den Du zeigst kann man nicht sehen warum das gesamte Fenster eingenommen wird.
2. Solltest Du einen Code haben, der die Größe anpasst, solltest Du den raum eben für Buttons unter dem Tab Control eben berücksichtigen.
3. Wie andere Fenster auch, kann man auch ein TabCtrl mit MoveWindow verschieben.
4. Ansonsten schau Dir TCM_ADJUSTRECT an.Lies:
http://msdn2.microsoft.com/en-us/library/bb760551(VS.85).aspxBTW: Wäre in diesem Falle die Verwednung von PropertySheet und PropertyPages nicht angebrachter?
http://msdn2.microsoft.com/en-us/library/bb760811(VS.85).aspx
-
Danke für den 2. Tip. Ich hab den Code aus dem Forum hier übernommen und mir gar bicht mehr so genau angeschaut.
Aber jetzt seh ich auch, das das TabControl wahrscheinlich mit flogendem Code durch die WM_SIZE Message an die Fenstergröße angepasst wird:SetRect(&rc, 0, 0, LOWORD(lParam), HIWORD(lParam)); MoveWindow(hwndtab, 0, 0, rc.right, rc.bottom, TRUE); SendMessage(hwndtab, TCM_ADJUSTRECT, (WPARAM)FALSE, (LPARAM)&rc); MoveWindow(phDlg[0], rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE); MoveWindow(phDlg[1], rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE); MoveWindow(phDlg[2], rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);Ich werde mir jetzt mal die Funktionen genau anschauen. Dann klappts gestimmt.
Jan
-
Ok. Ich habe jetzt die MoveWindow Funktionen geändert und es klappt natürlich. War ja klar, das es so ein blöder Fehler ist.
Vielen Dank an Martin für die Tipps. Ich hätte sonst wahrscheinlich noch ewig an dem Problem gesessen.Jan
Kleine Frage noch: Kann man hier im Forum Themen als gelöst markieren?