MFC分割視窗防止使用者改變窗格的大小
阿新 • • 發佈:2019-02-07
有時可能不希望使用者調整分割視窗的佈局,換句話說,就是不希望改變窗格的大小,那麼就可以擷取CWnd的訊息WM_NCHITTEST來實現這一功能。Windows使用這個訊息詢問視窗,游標是否處於某個特定的位置。在分割視窗中,當游標位於分割條上時,CWnd的預設視窗過程就會做出特定的反應,進而可以改變游標的形狀等。但是通過巧妙的設定WM_NCHITTEST訊息響應函式的返回值,則可以達到欺騙Windows的目的,這樣就可以鎖定分割條,因而也就不能再調整窗格的大小。
WM_NCHITTEST訊息響應函式OnNcHitTest的事項如下:
UINT CsplitterWndEx::OnNcHitTest(CPoint point) { //在此處新增訊息處理程式碼或者呼叫預設實現 return HTNOWHERE; }
可以看出,它遮蔽了對其基類成員CSplitterWnd::OnNcHitTest的呼叫,而直接返回HTNOWHERE值。這意味著,Windows將會一直認為並沒有像“游標位於分割條之上”的事件發生,因而游標的形狀不會變化,使用者也不能改變窗格的大小。
當然,還可以通過WM_MOUSEMOVE、WM_LBUTTONDOWN等訊息,並在響應函式中遮蔽對基類同名函式的呼叫,而直接對CWnd類的同名函式進行呼叫,同樣可以達到類似的效果。