WM _ NCHITTEST 消息

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

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

#define WM_NCHITTEST                    0x0084

parameters

wParam

未使用此参数。

lParam

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

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

返回值

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

返回代码/值 说明
HTBORDER
18
没有大小调整边框的窗口边框。
HTBOTTOM
15
在可调整大小的窗口的下水平边框 (用户可以单击鼠标将窗口垂直调整) 。
HTBOTTOMLEFT
16
在可调整大小的窗口的边框的左下角 (用户可以单击鼠标以沿对角) 调整窗口的大小。
HTBOTTOMRIGHT
17
在可调整大小的窗口的边框右下角 (用户可以单击鼠标以沿对角) 调整窗口的大小。
HTCAPTION
2
在标题栏中。
HTCLIENT
1
在工作区中。
HTCLOSE
20
在 " 关闭 " 按钮中。
HTERROR
-2
在屏幕背景上,或在 windows (与 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 坐标采用高阶 short (表示 有符号 的值,因为它们可以在具有多个监视器) 的系统上使用负值。 如果将返回值赋给变量,则可以使用 MAKEPOINTS 宏从返回值获取 结构。 你还可以使用 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)

请参阅

引用

DefWindowProc

获取 _ X _ LPARAM

获取 _ Y _ LPARAM

概念性

鼠标输入

其他资源

MAKEPOINTS