Whenever a mouse event occurs, the system sends a WM_NCHITTEST message to either the window that contains the mouse-cursor hot spot or the window with the mouse capture. Windows uses this message to determine whether to send a client-area or nonclient-area mouse message. A application that needs to receive mouse movement and mouse button messages must pass the WM_NCHITTEST message to the DefWindowProc function.
The lParam parameter of the WM_NCHITTEST message contains the screen coordinates of the mouse-cursor hot spot. The DefWindowProc function examines the coordinates and returns a hit-test code that identifies the location of the hot spot. The hit-test code can be one of the following values:
| Value | Meaning |
| HTBORDER | In the border of a window that does not have a sizing border |
| HTBOTTOM | In the lower horizontal border of a window |
| HTBOTTOMLEFT | In the lower-left corner of a window border |
| HTBOTTOMRIGHT | In the lower-right corner of a window border |
| HTCAPTION | In a title bar area |
| HTCLIENT | In a client area |
| HTERROR | On the screen background or on a dividing line between windows (same as HTNOWHERE except that the DefWindowProc function produces a system beep to indicate an error) |
| HTGROWBOX | In a size box (same as HTSIZE) |
| HTHSCROLL | In a horizontal scroll bar |
| HTLEFT | In the left border of a window |
| HTMENU | In a menu area |
| HTNOWHERE | On the screen background or on a dividing line between windows |
| HTREDUCE | In a Minimize button |
| HTRIGHT | In the right border of a window |
| HTSIZE | In a size box (same as HTGROWBOX) |
| HTSYSMENU | In a System menu or in a Close button in a child window |
| HTTOP | In the upper horizontal border of a window |
| HTTOPLEFT | In the upper-left corner of a window border |
| HTTOPRIGHT | In the upper-right corner of a window border |
| HTTRANSPARENT | In a window currently covered by another window |
| HTVSCROLL | In the vertical scroll bar |
| HTZOOM | In a Maximize button |
If the mouse-cursor is in the client area of a window, DefWindowProc returns the HTCLIENT hit-test code to the window procedure. When the window procedure returns this code to the system, Windows converts the screen coordinates of the mouse-cursor hot spot to client coordinates, then posts the appropriate client-area mouse message.
The DefWindowProc function returns one of the other hit-test codes when the mouse-cursor hot spot is in a window's nonclient area. When the window procedure returns one of these hit-test codes, Windows posts a nonclient-area mouse message, placing the hit-test code in the message's wParam parameter and the mouse-cursor coordinates in the lParam parameter.