C++ : 窗口變化相關消息 OnSize、OnSizing和OnGetMinMaxInfo,onsizeonsizing


3個消息分別是:WM_SIZEWM_SIZINGWM_GETMINMAXINFO;分別對應相應的處理函數:OnSizeOnSizingOnGetMinMaxInfo

當窗口大小發生變化時,響應的順序依次是:WM_GETMINMAXINFO-->WM_SIZING-->WM_SIZE

OnGetMinMaxInfo

這個函數在窗口初始化的時候會被調用一次,當窗口大小發生改變的時候也會被調用。利用這個函數,可以比較方便的實現窗口最大最小尺寸的控制。

參數lpMMI是一個結構體指針,其中包含了有關窗口的最大化大小和位置以及最小、最大跟蹤大小的信息。

使用這個函數控制窗口最小尺寸的示例的代碼如下:

void CXXXDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)

{

lpMMI->ptMinTrackSize.x = 500; //x寬度

lpMMI->ptMinTrackSize.y = 100; //y高度

 

CDialog::OnGetMinMaxInfo(lpMMI);

}

以上代碼可以使得窗口大小變化時,最小寬度為500px,最小高度為100px

OnSizing

這個函數在窗口大小發生變化時被調用。在這個函數里,也可以控制窗口的最大最小尺寸,但是沒有OnGetMinMaxInfo方便。

void CXXXDlg::OnSizing(UINT fwSide, LPRECT pRect)

{

if ((pRect->right - pRect->left) < 500)

{

//return ; //直接return是無效的,窗口大小還是會改變

pRect->right = pRect->left + 500;

}

 

CDialog::OnSizing(fwSide, pRect);

}

用上面的方法,如果是從右邊改變大小,可以達到想要的效果,但是從左邊改變大小,雖然大小可以控制在最小500,但是當達到最小寬度后,再縮小,會發現整個窗口往右移動了,原因是代碼中的pRect->right = pRect->left + 500;這句是針對left來改變right的,所以left移動了,right也移動了,看上去就像是這個窗口右移了。所以針對這種情況又要另外做相應的處理。

OnSize

這個函數會在窗口大小改變結束后被調用,通常會在這個函數里重新擺放各個控件的位置及大小。用這個函數暫時沒有找到什么辦法可以控制窗口的最大最小大小。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM