Fenster linear Vergrößern/Kleinern ?
-
Hallo,
Ich habe per WinAPI ein Fenster erstellt, welches sich auch in der Größe verändern lässt(Die Ränder lassen sich "ziehen").
Nun möchte ich aber dass sich das Seitenverhältnis des Fensters nicht ändert.Ich habe es über die WndProc mit dem Event WM_SIZE versucht, in dieser Funktion Berechne ich eifach über mein festes Seitenverhältnis und die vom Benutzer eingestellte Breite die dazu passende Höhe, und zwar so:
#define ROUND(a) (int)(a>0 ? a+0.5f: a-0.5f) (...) int fHeight = ROUND( (float)LOWORD(lParam) / fFactor );Anschließend setze ich die "neue" Höhe des Fensters über:
RECT wndrct; GetWindowRect( hWnd, &wndrct ); SetWindowPos( hWnd, hWnd, wndrct.left, wndrct.top, LOWORD(lParam), fHeight, NULL );Leider funktioniert das so nicht, gibt es dafür eine bessere Möglichkeit?
-
Klar, in WM_WINDOWPOSCHANGING macht mas das.
WINDOWPOS *pwp = lParam; if (wp->cx != cx_old) { // breite hat sich geaendert cx_old = wp->cx; // adjust height wp->cy = wp->cx * ratio; } else if (wp->cy != cy_old) ...
-
Wenn es um die Benutzeränderungen geht ist evtl. WM_SIZING der bessere Ansatz, dann kann das Programm machen was es will, der User aber wird durch WM_SIZING eingeschränkt.