OnSize、OnSizing和OnGetMinMaxInfo區(qū)別分析
最近用到窗口變化的一些東西,遇到幾個相關的消息函數,簡要分析,作為備忘。
3個消息分別是:WM_SIZE、WM_SIZING、WM_GETMINMAXINFO;分別對應相應的處理函數:OnSize、OnSizing、OnGetMinMaxInfo。
當窗口大小發(fā)生變化時,響應的順序依次是:WM_GETMINMAXINFO-->WM_SIZING-->WM_SIZE。
OnGetMinMaxInfo
這個函數在窗口初始化的時候會被調用一次,當窗口大小發(fā)生改變的時候也會被調用。利用這個函數,可以比較方便的實現窗口最大最小尺寸的控制。
參數lpMMI是一個結構體指針,其中包含了有關窗口的最大化大小和位置以及最小、最大跟蹤大小的信息。
使用這個函數控制窗口最小尺寸的示例的代碼如下:
void CXXXDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
lpMMI->ptMinTrackSize.x = 500; //x寬度
lpMMI->ptMinTrackSize.y = 100; //y高度
CDialog::OnGetMinMaxInfo(lpMMI);
}
以上代碼可以使得窗口大小變化時,最小寬度為500px,最小高度為100px。
OnSizing
這個函數在窗口大小發(fā)生變化時被調用。在這個函數里,也可以控制窗口的最大最小尺寸,但是沒有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,但是當達到最小寬度后,再縮小,會發(fā)現整個窗口往右移動了,原因是代碼中的pRect->right = pRect->left + 500;這句是針對left來改變right的,所以left移動了,right也移動了,看上去就像是這個窗口右移了。所以針對這種情況又要另外做相應的處理。
OnSize
這個函數會在窗口大小改變結束后被調用,通常會在這個函數里重新擺放各個控件的位置及大小。用這個函數暫時沒有找到什么辦法可以控制窗口的最大最小大小。
上一篇:C語言求兩個字符串的最長公共子串
欄 目:C語言
本文標題:OnSize、OnSizing和OnGetMinMaxInfo區(qū)別分析
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3167.html
您可能感興趣的文章
- 01-10C語言 解決不用+、-、&#215;、&#247;數字運算符做加法
- 01-10基于C程序啟動代碼的深入分析
- 01-10深入分析父子線程、進程終止順序不同產生的結果
- 01-10深入理解C/C++混合編程
- 01-10深入探討linux下進程的最大線程數、進程最大數、進程打開的文
- 01-10linux c 獲取本機公網IP的實現方法
- 01-10基于select、poll、epoll的區(qū)別詳解
- 01-10基于大端法、小端法以及網絡字節(jié)序的深入理解
- 01-10c語言字符數組與字符串的使用詳解
- 01-10深入探討:宏、內聯函數與普通函數的區(qū)別


閱讀排行
本欄相關
- 04-02c語言函數調用后清空內存 c語言調用
- 04-02func函數+在C語言 func函數在c語言中
- 04-02c語言的正則匹配函數 c語言正則表達
- 04-02c語言用函數寫分段 用c語言表示分段
- 04-02c語言中對數函數的表達式 c語言中對
- 04-02c語言編寫函數冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數 round c語言
- 04-02c語言分段函數怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數 c語言中怎
- 04-02c語言調用函數求fibo C語言調用函數求
隨機閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05dedecms(織夢)副欄目數量限制代碼修改
- 01-11ajax實現頁面的局部加載
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10C#中split用法實例總結
- 01-10SublimeText編譯C開發(fā)環(huán)境設置