Dialoggröße ändern (Seitenverhältnis)

amigian

Grünschnabel
Hallo Leute,

ich möchte erreichen, dass beim Ändern der Größe eines Dialoges das Seitenverhältnis immer gleich bleibt. Leider gelingt mir dies nicht wirklich. Hoffentlich hatte einer eine Idee.

Tschau Steven
 
Knifflig, das wird ziemlich sicher flackern, wenn du an der Ecke ziehst.

Einfach auf WM_SIZING/WM_MOVING prüfen, dort die übergebene Grösse anpassen und die Grösse neu setzen.
 
Hallo Endurion,

das mit dem Flackern stört mich weniger. Mein Problem ist halt, das MoveWindow beim Setzen der Größe wieder OnSize() aufruft. Ist schwierig in den Griff zu bekommen. Man kann zwar prüfen ob das Verhältnis stimmt aber kleinere Rechenfehler machens schwer. Ich sehe aber das ist wohl eine größeres Problem. :mad:

Danke trotzdem, tschau Steven
 
Da wirst du an der Stelle nicht drumrum kommen. Einfach in OnSize nachrechnen und nur dann eine neue Grösse setzen, wenn diese von der alten abweicht.
 
Hi amigian,

das ist recht einfach.

Füge den Eventhandler für WM_SIZING (nicht WM_SIZE) hinzu!

In diesem berechnest du die neue größe bevor du CDialog::OnSizing(..) aufrufst.

In etwa so:

Code:
void CDesignerDlgDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
    pRect->bottom = pRect->top + (pRect->right-pRect->left)/2;
    // Verhältnis zwischen Breite und Höhe ist immer 2:1 !!
    CDialog::OnSizing(fwSide, pRect);
}

Der Code flackert gar net ;-)

Hoffe das hilft dir.

Viel erfolg weiterhin,

Peter
 
Hallo Peter,

habe auch in dieser Funktion rumgebastelt, aber dein Tip funktioniert. Gibt zwar Probleme beim Ziehen an den Ecken, habe das aber erstmal umgangen. Nochmals Danke.

problem solved

Bye Steven
 

Neue Beiträge

Zurück