37.1.5 The WM_NCHITTEST Message

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.