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.