2013-09-26 14 views
10

Ich habe einige Fragen zu StackOverflow zu meinem Thema gefunden. Einer von ihnen ist here.Maximale und minimale Fenstergrößen in WINAPI

Ich habe auch die Microsoft-Dokumentation über und die Nachricht mit dieser Struktur verbunden. Ich kann es einfach nicht funktioniert ... Hier ist, was ich versucht habe, so weit:

case WM_PAINT: 
{ 
    MINMAXINFO mmi = { 0 }; 
    SendMessage(hWnd, WM_GETMINMAXINFO, NULL, (LPARAM)&mmi); 
    POINT sz = { 640, 480 }; 
    mmi.ptMaxSize = sz; 
} 
break; 

Ich denke, das ist völlig falsch, da sie keine Auswirkungen auf das Fenster aufweist, ist ...

Wie kann ich das funktionieren, für eine Mindestgröße von W: 450, H: 250, und ein Maximum von W:800, H: 600?

Ein weitere Erläuterung der Wirkung, die ich brauche: wenn der Benutzer eine Ecke oder Rand des Fensters zieht, und das Fenster hat die maximale/minimale Größe, kann der Benutzer nicht das Fenster größer oder kleiner als die minimum_size/maximum_size machen

Antwort

15

WM_GETMINMAXINFO ist eine Nachricht, die das System an ein Fenster sendet. Sie sendet diese Nachricht, wenn sie wissen möchte, welche minimalen und maximalen zulässigen Größen für das Fenster gelten. Sie senden diese Nachricht nie. Sie können jedoch auf diese Nachricht antworten, wenn sie an Sie gesendet wird.

So müssen Sie einen Fall für WM_GETMINMAXINFO in Ihrem Fensterprozedur hinzuzufügen:

case WM_GETMINMAXINFO: 
{ 
    MINMAXINFO* mmi = (MINMAXINFO*)lParam; 
    mmi->ptMaxSize.x = 800; 
    mmi->ptMaxSize.y = 600; 
    return 0; 
} 

Es stellt sich heraus, dass Sie die Tracking-Größe steuern möchten. Tun Sie das so:

case WM_GETMINMAXINFO: 
{ 
    MINMAXINFO* mmi = (MINMAXINFO*)lParam; 
    mmi->ptMinTrackSize.x = 450; 
    mmi->ptMinTrackSize.y = 250; 
    mmi->ptMaxTrackSize.x = 640; 
    mmi->ptMaxTrackSize.y = 480; 
    return 0; 
} 
+0

Vielen Dank! Dies schafft genau den Effekt, den ich bekommen wollte! – Victor

Verwandte Themen