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

要求

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

另请参阅

引用

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

概念性

鼠标输入

其他资源

MAKEPOINTS