2013-09-26 12 views
10

Znalazłem więcej pytań na temat StackOverflow na mój temat. Jednym z nich jest here.Maksymalne i minimalne rozmiary okien w WINAPI

Przeczytałem również dokumentację Microsoft o numerze MINMAXINFO i komunikat związany z tą strukturą. Ja po prostu nie może działać ... Oto, co starałem dotąd:

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

myślę, że to jest całkowicie błędne, ponieważ nie wywiera żadnego wpływu na oknie ...

Jak to działa, dla minimalnej wielkości W: 450, H: 250 i maksymalnie W:800, H: 600?

Dalsze wyjaśnienie stwierdzające, że muszę: gdy użytkownik przeciągnie jeden róg, lub obramowanie okna, a okno ma maksymalną/minimalną wielkość, użytkownik nie może sprawić, że okno większy lub mniejszy niż minimum_size/maximum_size

Odpowiedz

15

WM_GETMINMAXINFO to komunikat, który system wysyła do okna. Wysyła tę wiadomość, gdy chce wiedzieć, że minimalne i maksymalne dopuszczalne rozmiary dotyczą okna. Nigdy nie wyślesz tej wiadomości. Możesz jednak odpowiedzieć na tę wiadomość, gdy zostanie do Ciebie wysłana.

Więc trzeba dodać przypadek dla WM_GETMINMAXINFO w procedurze okna:

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

Okazuje się, że chcesz kontrolować wielkość śledzenia. Zrób tak:

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

Dziękuję bardzo! To tworzy dokładnie taki efekt, jaki chciałem uzyskać! – Victor

Powiązane problemy