OnSize、OnSizing和OnGetMinMaxInfo差別剖析。本站提示廣大學習愛好者:(OnSize、OnSizing和OnGetMinMaxInfo差別剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是OnSize、OnSizing和OnGetMinMaxInfo差別剖析正文
比來用到窗口變更的一些器械,碰到幾個相干的新聞函數,扼要剖析,作為備忘。
3個新聞分離是:WM_SIZE、WM_SIZING、WM_GETMINMAXINFO;分離對應響應的處置函數:OnSize、OnSizing、OnGetMinMaxInfo。
當窗口年夜小產生變更時,呼應的次序順次是: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
這個函數會在窗口年夜小轉變停止後被挪用,平日會在這個函數裡從新擺放各個控件的地位及年夜小。用這個函數臨時沒有找到甚麼方法可以掌握窗口的最年夜最小年夜小。