一般窗口大小的改變,都是用戶拖動窗口邊框而造成的。所以,我們可以截獲主窗口消息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)題欄也不會化了。
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)題欄也不會化了。