每当鼠标事件发生时,系统会向包含光标热点的窗口或捕获鼠标的窗口发送WM_NCHITTEST消息。Windows使用此消息来确定是发送客户端区域还是非客户端区域鼠标消息。必须接收鼠标移动和鼠标按钮消息的应用程序必须将WM_NCHITTEST消息传递给DefWindowProc功能。
WM_NCHITTEST消息的【lParam的】参数包含光标热点的屏幕坐标。DefWindowProc函数检查坐标并返回一个用于标识热点位置的命中测试值。命中测试值可以是以下值之一。
值 | 热点位置 |
HTBORDER | 在没有尺寸边框的窗口的边框 |
HTBOTTOM | 在窗口的较低水平边框 |
HTBOTTOMLEFT | 在窗口边框的左下角 |
HTBOTTOMRIGHT | 在窗口边框的右下角 |
HTCAPTION | 在标题栏中 |
HTCLIENT | 在客户区 |
HTCLOSE | 在关闭按钮。 |
HTERROR | 在屏幕背景上或窗口之间的分界线(与HTNOWHERE相同),除了DefWindowProc功能产生系统蜂鸣声以指示错误) |
HTGROWBOX | 在一个大小框(与HTSIZE相同) |
HTHELP | 在帮助按钮。 |
HTHSCROLL | 在水平滚动条中 |
HTLEFT | 在窗口的左边界 |
HTMENU | 在菜单中 |
HTMAXBUTTON | 在最大化按钮。 |
HTMINBUTTON | 在最小化按钮。 |
HTNOWHERE | 在屏幕背景上或窗口之间的分界线上 |
HTREDUCE | 在最小化按钮 |
HTRIGHT | 在窗口的右边界 |
HTSIZE | 在一个大小框(与HTGROWBOX相同) |
HTSYSMENU | 在系统菜单或子窗口中的关闭按钮中 |
HTTOP | 在窗口的上部水平边框 |
HTTOPLEFT | 在窗口边框的左上角 |
HTTOPRIGHT | 在窗口边框的右上角 |
HTTRANSPARENT | 在当前由另一个窗口覆盖的窗口中 |
HTVSCROLL | 在垂直滚动条中 |
HTZOOM | 在最大化按钮 |
如果光标位于窗口的客户端区域,DefWindowProc将HTCLIENT命中检测值返回给窗口过程。当窗口过程将此代码返回给系统时,Windows将光标热点的屏幕坐标转换为客户端坐标,然后发布相应的客户区域鼠标消息。
当光标热点位于窗口的非客户区域中时,DefWindowProc函数返回其他命中测试值之一。当窗口过程返回其中一个命中测试值时,Windows发布非客户区鼠标消息,将命中测试值放在消息的【wParam中】参数中,光标坐标位于【lParam的】参数中。