Whenever a mouse event occurs, the system sends a WM_NCHITTEST message to either the window that contains the cursor hot spot or the window that has captured the mouse. The system uses this message to determine whether to send a client area or nonclient area mouse message. An application that must 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 cursor hot spot. The DefWindowProc function examines the coordinates and returns a hit-test value that identifies the location of the hot spot. The hit-test value can be one of the following values.
Value | Location of hot spot |
---|---|
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 |
HTCLIENT | In a client area |
HTCLOSE | In close button. |
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) |
HTHELP | In Help button. |
HTHSCROLL | In a horizontal scroll bar |
HTLEFT | In the left border of a window |
HTMENU | In a menu |
HTMAXBUTTON | In Maximize button. |
HTMINBUTTON | In Minimize button. |
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 in the same thread |
HTVSCROLL | In the vertical scroll bar |
HTZOOM | In a Maximize button |
If the cursor is in the client area of a window, DefWindowProc returns the HTCLIENT hit-test value to the window procedure. When the window procedure returns this code to the system, the system converts the screen coordinates of the cursor hot spot to client coordinates, and then posts the appropriate client area mouse message.
The DefWindowProc function returns one of the other hit-test values when the cursor hot spot is in a window's nonclient area. When the window procedure returns one of these hit-test values, the system posts a nonclient area mouse message, placing the hit-test value in the message's wParam parameter and the cursor coordinates in the lParam parameter.