2013-09-26 132 views
10

我在StackOverflow上發現了一些關於我的主題的更多問題。其中之一是hereWINAPI中的最大和最小窗口大小

我還閱讀了關於MINMAXINFO的Microsoft文檔以及與此結構相關的消息。我根本無法使其工作......這是我到目前爲止已經試過:

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

我覺得這是完全錯誤的,因爲它不具有窗口上的任何影響......

我怎樣才能得到這個工作,最小尺寸爲W: 450, H: 250,最大爲W:800, H: 600

我需要的效果的進一步說明:當用戶拖動窗口的一個角或邊框,並且窗口具有最大/最小尺寸時,用戶無法使窗口大於或小於minimum_size/maximum_size

回答

15

WM_GETMINMAXINFO是系統發送到窗口的消息。當它想要知道窗口的最小和最大允許尺寸時,它發送該消息。你永遠不會發送該消息。但是,您可以在發送給您時回覆該消息。

所以,你需要你的窗口過程中添加的情況下爲WM_GETMINMAXINFO

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

事實證明,要控制跟蹤大小。這樣做如下:

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

非常感謝!這創造了我想要得到的效果! – Victor