Listenelement an Fenstergrösse anpassen
-
Hallo!
Ich habe eine dialogfeldbasierte MFC-Anwendung mit einem Fenster mit verschiedenen Steuerelementen darin, unter anderem ein Listenelement. Dieses Listenelement liegt an drei Seiten am Fensterrand an.
Nun möchte ich, dass sich die Grösses des Listenelementes verändert, wenn ich das Fenster grösser oder kleiner mache, dass also das Listenelement an drei Seiten quasi am Fensterrand "angeklebt" wird.Ich danke herzlich für Ratschläge und Hinweise.
-
Am einfachsten ist es, in CMyDialog::OnSize die Fenstergröße der Listenansicht mit m_ListenAnsicht.MoveWindow entsprechend anzupassen.
-
Vielen Dank. Aber wie finde ich die Grösse heraus, die das Fenster gerade hat?
-
CMyDialog::OnSize bekommt die neue Höhe und Breite des Clientbereiches in den Funktionsparametern übergeben.
-
Vielen Dank, du merkst, ich kenne mich kaum aus mit MFC-Sachen.
Jedenfalls habe ich in der MSDN ein Beispiel-Code gefunden und den in meiner Anwendung analog übernommen. Es ist jetzt so bei mir:void CNeuProdukt::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); m_ctrllist.MoveWindow(0,0,cx,cy); }Wenn ich nun aber das Fenster öffnen will, zeigt es das Fenster nicht an, sondern es erscheint eine Fehlermeldung in der steht "Debug Assertion Failed!". Und weiter "File: winocc.cpp / Line: 279". Sobald ich den MoveWindow-Befehl rausnehme, klappt es wieder. Was stimmt also daran nicht?
Besten Dank für eure Hilfe.
-
Das ist nur folgerichtig. Denn WM_SIZE wird auch versendet, wenn das Fenster erzeugt wird, und dann existiert das Kindefenster ja noch nicht!
Die Codeänderung führt dazu, dass der Resize nur durchgeführt wird, wennn das Fenster auch erzeugt wurde.
void CNeuProdukt::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if (m_ctrllist.GetSafeHwnd()) m_ctrllist.MoveWindow(0,0,cx,cy); }