国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

OnSize、OnSizing和OnGetMinMaxInfo區(qū)別分析

2020-01-26 15:10:46
字體:
供稿:網(wǎng)友

最近用到窗口變化的一些東西,遇到幾個(gè)相關(guān)的消息函數(shù),簡要分析,作為備忘。

3個(gè)消息分別是:WM_SIZE、WM_SIZING、WM_GETMINMAXINFO;分別對應(yīng)相應(yīng)的處理函數(shù):OnSize、OnSizing、OnGetMinMaxInfo。

當(dāng)窗口大小發(fā)生變化時(shí),響應(yīng)的順序依次是:WM_GETMINMAXINFO-->WM_SIZING-->WM_SIZE。

OnGetMinMaxInfo

這個(gè)函數(shù)在窗口初始化的時(shí)候會被調(diào)用一次,當(dāng)窗口大小發(fā)生改變的時(shí)候也會被調(diào)用。利用這個(gè)函數(shù),可以比較方便的實(shí)現(xiàn)窗口最大最小尺寸的控制。

參數(shù)lpMMI是一個(gè)結(jié)構(gòu)體指針,其中包含了有關(guān)窗口的最大化大小和位置以及最小、最大跟蹤大小的信息。

使用這個(gè)函數(shù)控制窗口最小尺寸的示例的代碼如下:

復(fù)制代碼 代碼如下:

void CXXXDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
    lpMMI->ptMinTrackSize.x = 500;    //x寬度
    lpMMI->ptMinTrackSize.y = 100;    //y高度
    CDialog::OnGetMinMaxInfo(lpMMI);
}

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

OnSizing

這個(gè)函數(shù)在窗口大小發(fā)生變化時(shí)被調(diào)用。在這個(gè)函數(shù)里,也可以控制窗口的最大最小尺寸,但是沒有OnGetMinMaxInfo方便。

復(fù)制代碼 代碼如下:

void CXXXDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
    if ((pRect->right - pRect->left) < 500)
    {
        //return ;    //直接return是無效的,窗口大小還是會改變
        pRect->right = pRect->left + 500;
    }
    CDialog::OnSizing(fwSide, pRect);
}

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

OnSize

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 齐河县| 彰化市| 贡觉县| 清水河县| 长葛市| 彰武县| 滦南县| 西林县| 门源| 泸州市| 师宗县| 黄平县| 巴南区| 射洪县| 木里| 壤塘县| 浏阳市| 寿光市| 泾阳县| 栖霞市| 乐东| 安远县| 吉安县| 尼玛县| 黄大仙区| 宁陕县| 襄汾县| 兰溪市| 探索| 察哈| 苗栗市| 北海市| 合阳县| 上思县| 射阳县| 天水市| 綦江县| 汉源县| 九龙县| 九龙县| 泰兴市|