MFC的對話框CDialog是怎么控制窗口可調整大小的屬性的呢?打開資源文件,對話框資源的屬性列表中,有一個“Border”項,改變該項的值就可以改變窗口邊框風格。實際上windows窗口是否可調整大小,就是根據邊框的風格來確定的。窗口風格中與邊框有關的值如下:
WS_BORDER - Thin-line border,不能調整大小;
WS_DLGFRAME - dialog box typical border,不能調整大小;
WS_SIZEBOX - sizing border,可以調整大小;
WS_THICKFRAME - 同WS_SIZEBOX。
我們可以通過CreateWindow函數的dwStyle參數值來指定窗口風格,但是如果想在運行期動態改變窗口邊框風格呢?可以用ModifyStyle函數,通過簡單的添加和刪除上面的窗口風格,就能實現窗口可調整大小屬性的改變。
但是如果你將“System Menu”屬性設置為“True”,就會發現即使調用ModifyStyle(WS_BORDER, WS_THICKFRAME, SWP_FRAMECHANGED);將邊框修改為thick frame也不能調整大小,出現了箭頭,但是窗口大小是固定的,原因是必須要將“Maximize Box”設置為“True”。
當然,也可以用代碼ModifyStyle(NULL, WS_SYSMENU | WS_MAXIMIZEBOX);來添加系統菜單和最大化按鈕。
當我們需要固定對話框尺寸時,有3個地方需要控制:1,邊框不能拉伸窗口;2,最大化按鈕不可用;3,禁止雙擊標題欄最大化。指定邊框風格為WS_BORDER可完成1和3,去掉WS_MAXIMIZEBOX可完成2。MFC已經為我們封裝的很好。
