WM_NCHITTEST 消息

发送到窗口以确定窗口的哪个部分对应于特定的屏幕坐标。 例如,当光标移动、按下或释放鼠标按钮或响应对 WindowFromPoint 等函数的调用时,可能会发生这种情况。 如果未捕获鼠标,则消息将发送到光标下方的窗口。 否则,消息将发送到捕获了鼠标的窗口。

窗口通过其 WindowProc 函数接收此消息。

#define WM_NCHITTEST                    0x0084

参数

wParam

未使用此参数。

lParam

低序字指定光标的 x 坐标。 坐标相对于屏幕的左上角。

高序字指定光标的 y 坐标。 坐标相对于屏幕的左上角。

返回值

DefWindowProc 函数的返回值是下列值之一,指示光标热点的位置。

返回代码/值 说明
HTBORDER
18
在没有大小调整边框的窗口边框中。
HTBOTTOM
15
在可调整大小的窗口的下水平边框中(用户可以单击鼠标以垂直调整窗口大小)。
HTBOTTOMLEFT
16
在可调整大小的窗口的边框左下角(用户可以单击鼠标以对角线调整窗口大小)。
HTBOTTOMRIGHT
17
在可调整大小的窗口的边框右下角(用户可以单击鼠标以对角线调整窗口大小)。
HTCAPTION
2
在标题栏中。
HTCLIENT
1
在工作区中。
HTCLOSE
20
在“关闭”按钮中
HTERROR
-2
在屏幕背景上或窗口之间的分割线上(与 HTNOWHERE 相同,只是 DefWindowProc 函数会生成系统蜂鸣音以指示错误)。
HTGROWBOX
4
在大小框中(与 HTSIZE 相同)
HTHELP
21
在“帮助”按钮中
HTHSCROLL
6
在水平滚动条中。
HTLEFT
10
在可调整大小的窗口的左边框中(用户可以单击鼠标以水平调整窗口大小)。
HTMENU
5
在菜单中。
HTMAXBUTTON
9
在“最大化”按钮中
HTMINBUTTON
8
在“最小化”按钮中
HTNOWHERE
0
在屏幕背景上,或在窗口之间的分隔线上。
HTREDUCE
8
在“最小化”按钮中
HTRIGHT
11
在可调整大小的窗口的右左边框中(用户可以单击鼠标以水平调整窗口大小)。
HTSIZE
4
在大小框中(与 HTGROWBOX 相同)
HTSYSMENU
3
在窗口菜单或子窗口的关闭按钮中。
HTTOP
12
在窗口的上水平边框中。
HTTOPLEFT
13
在窗口边框的左上角。
HTTOPRIGHT
14
在窗口边框的右上角。
HTTRANSPARENT
-1
在同一线程当前由另一个窗口覆盖的窗口中(消息将发送到同一线程中的基础窗口,直到其中一个窗口返回不是 HTTRANSPARENT 的代码)。
HTVSCROLL
7
在垂直滚动条中。
HTZOOM
9
最大化按钮中。

备注

使用以下代码获取水平和垂直位置:

xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam);

如上所述,x 坐标位于返回值的低位短值;y 坐标位于高位短值(两者都表示有符号值,因为它们在具有多个监视器的系统上可以取负值)。 如果返回值被赋给一个变量,则可以使用 MAKEPOINTS 宏从返回值中获取一个 POINTS 结构。 还可以使用 GET_X_LPARAMGET_Y_LPARAM 宏提取 x 或 y 坐标。

重要

请勿使用 LOWORDHIWORD 宏提取光标位置的 x 和 y 坐标,因为这些宏在具有多个监视器的系统上会返回不正确的结果。 具有多个监视器的系统可以具有负 x 坐标和 y 坐标,LOWORDHIWORD 会将坐标视为无符号数量。

Windows Vista:创建包含标准描述文字按钮的自定义帧时,应首先将此消息传递给 DwmDefWindowProc 函数。 这使桌面窗口管理器 (DWM) 可为字幕按钮提供命中测试。 如果 DwmDefWindowProc 不处理消息,则可能需要进一步处理 WM_NCHITTEST

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Winuser.h(包括 Windowsx.h)

另请参阅

引用

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

Conceptual

鼠标输入

其他资源

MAKEPOINTS

POINTS