vc++中限制窗口大小的方法

字號:

一般窗口大小的改變,都是用戶拖動窗口邊框而造成的。所以,我們可以截獲主窗口消息WM_NCHITTEST在其響應(yīng)函數(shù)中判斷CWnd::OnNcHitTest()的返回值是否為
    HTRIGHT,
    HTLEFT,
    HT,
    HTBOTTOM
    四個值之一,如果是,說明用戶此時已點(diǎn)擊了四個邊框之一,此時我們應(yīng)該返回HTCLIENT.那么,鼠標(biāo)的形狀就不會變成水平或垂直的雙向箭頭,用戶就不可能依靠拖動邊框來改變窗口大小了。
    用class wizard看了以下,沒有找到WM_NCHITTEST這個消息,只能手動添加消息映射了 。
    在BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)下添上
    ON_WM_NCHITTEST()
    在框架類的頭文件下
    聲明
    afx_msg LRESULT OnNcHitTest(CPoint point);
    實(shí)現(xiàn)
    LRESULT CMainFrame::OnNcHitTest(CPoint point)
    {
    if(CWnd::OnNcHitTest(point) == HTRIGHT || CWnd::OnNcHitTest(point) == HTLEFT || CWnd::OnNcHitTest(point) == HT || CWnd::OnNcHitTest(point) == HTBOTTOM)
    return HTCLIENT;
    return CWnd::OnNcHitTest(point);
    }
    這樣的話就不能用鼠標(biāo)改變大小了,但是,只是限制了四條邊,雖然不能拖拉四條邊了,但是四個角。因此,再加上
    HTLEFT
    HTRIGHT
    HTBOTTOMLEFT
    HTBOTTOMRIGHT
    這樣4邊+4角都不行了。呵呵
    不過,還缺一點(diǎn)點(diǎn) ,缺什么
    考試大提示: 雙擊窗口最上方也就是caption區(qū)域時窗口會變小,而且沒辦法回復(fù)怎么辦??
    examda編者薦:在OnCreate函數(shù)中加入如下代碼:
    SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE)&~WS_MAXIMIZEBOX);
    這樣化按鈕也不能用了,而且雙擊標(biāo)題欄也不會化了。