每当鼠标事件发生时,系统会向包含光标热点的窗口或捕获鼠标的窗口发送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的】参数中。