MoveWindow und Scrollbars
-
Mit folgenden Code plaziere ich drei Comboboxen unter meiner Liste
m_Liste.GetClientRect(&ct); long w = ct.Width()/3-1; ct.TopLeft().y = ct.BottomRight().y+28; ct.BottomRight().y = ct.BottomRight().y+300; ct.TopLeft().x +=10; ct.BottomRight().x = w; m_SPAuswahl.MoveWindow(&ct); m_Liste.GetClientRect(&ct); ct.TopLeft().y = ct.BottomRight().y+28; ct.TopLeft().x = w; ct.BottomRight().x = 2*w; ct.BottomRight().y = ct.BottomRight().y+100; m_CBDatum.MoveWindow(&ct); m_Liste.GetClientRect(&ct); ct.TopLeft().y = ct.BottomRight().y+28; ct.TopLeft().x = 2*w; ct.BottomRight().x = 3*w; ct.BottomRight().y = ct.BottomRight().y+150; m_Status_c.MoveWindow(&ct);Das funktioniert meistens auch,aber wenn die Liste Scrollbalken hat,rutschen die Komboboxen halb unter die Liste.
-
Hoch
-
Hoch
-
Hoch
-
Hallo !
Sorry für das da oben...

Mal im Ernst:
füllst du erst die Liste und danach kommt dein geposteter Code ? Versuch es mal anders herum: erst die ComboBoxen plazieren und dann die Liste füllen.Tschüss
-
Übrigens (fällt mir gerade noch auf):
die Zeile m_Liste.GetClientRect(&ct); brauchst du nur einmal, die beiden anderen identischen kannst du heraus nehmen. Ebenso die Zeile ct.TopLeft().y = ct.BottomRight().y+28; (die Höhe ändert sich ja nicht mehr). Das gleiche gilt eigentlich auch für den unteren Rand... Keine Ahnung, warum du da verschiedene Werte hast...
-
Aber WIESO 'GetClientRect'? Laut Doku liefert dieses Rechteck die Abmessungen innerhalb des Listenfensters. Logischerweise ist diese geringer, wenn das Listenfenster Scrollbalken bekommt.
Normalerweise nimmt man dafür GetWindowRect, und wandelt die Koordinaten über ScreenToClient in die Koordinaten des Parents um.
-
Das zweite hoch ist mir wegen eines Fehler reingerutscht.
Ich rufe diesen Code bei OnInit,OnSize und beim drücken eines Button(der Button macht eine weitere Liste an der Seite sichtbar,daher müssen die ComboBoxen neu positioniert werden.)In die Liste laufen die ganze Zeit neue Einträge rein.
Die ComboBoxen sind verschieden hoch,weil in einer 10-100 Einträge sind in der zweiten 5 und in der letzten 3.
-
Vielen Dank, RenéG,jetzt läuft es.
Aber WIESO 'GetClientRect'? -Weil ich blöd bin