有时可能不希望用户调整分割窗口的布局,换句话说,就是不希望改变窗格的大小,那么就可以截取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类的同名函数进行调用,同样可以达到类似的效果。