捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >API档案 > 正文
17 2017.06

WM_NCHITTEST

点击次数:1431 更新时间:2017-6-17 19:47:17  【打印此页

原文链接 -> 传送门

消息含义:

WM_NCHITTEST 消息在鼠标移动、点击、释放或者响应 WindowFromPoint 函数时产生。 

WM_NCHITTEST 消息的响应函数会根据鼠标当前的屏幕坐标来判断鼠标命中了窗口的哪个部位,消息响应函数的返回值指出了具体命中的部位名称(见下方返回值)。如果鼠标没有被捕捉,WM_NCHITTEST 消息在窗体得到光标之后发出。否则,消息发送到捕获到鼠标的窗体。 

窗口通过它的 WindowProc 函数接收消息,但此消息一般默认由操作系统的 DefWindowProc 函数来响应。

小甲鱼温馨提示:这个消息比较实用,为了促进理解,有必要跟大家描述一下 Windows 对鼠标键按下的响应流程:

1. 确定鼠标键点击的是哪个窗口:Windows 会事先记录当前屏幕上各个窗口的区域坐标,当鼠标驱动程序通知 Windows 鼠标按键被按下了,Windows 根据鼠标的坐标确定它点击的是哪个窗口;

2. 确定鼠标键点击的是窗口的哪个部位:Windows 会向鼠标键点击的那个窗口发送 WM_NCHITTEST 消息,来询问鼠标键点击的是窗口的哪个部位。(WM_NCHITTEST 消息的响应函数通过返回值会告知 Windows 被按下部位的名称)。通常来说,WM_NCHITTEST 消息是由操作系统来处理的,我们一般不会主动去处理它;

3. 根据鼠标键点击的部位给窗口发送相应的消息:比如 WM_NCHITTEST 消息的响应函数返回值是 HTCLIENT,表示鼠标点击的是客户区,则 Windows 会向窗口发送 WM_LBUTTONDOWN 消息;再如 WM_NCHITTEST 消息的响应函数返回值是 HTCAPTION,即鼠标点击的是非客户区(标题栏),Windows 就会向窗口发送 WM_NCLBUTTONDOWN 消息。


消息定义:
 

 #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 相同,除了 Windows 的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)

在最大化按钮上



备注:

1. 使用下面的代码获取鼠标的水平和垂直位置:        

1.  xPos = GET_X_LPARAM(lParam); 

2.  yPos = GET_Y_LPARAM(lParam);

复制代码


2. 如上面所示,X 坐标在 lParam  参数的低位字节;Y 坐标在 lParam 参数的高位字节(两个都是有符号值,因为在多屏幕系统上它们可以为负值)。如果 lParam 参数赋值给一个变量,您可以使用 MAKEPOINTS 宏把 lParam 参数转成 POINTS结构。您也可以使用 GET_X_LPARAM 宏或者 GET_Y_LPARAM 宏提取 X 坐标或者 Y 坐标。

重要:不要使用 LOWORD 宏或者 HIWORD 宏提取鼠标位置的 X 和 Y 坐标,因为在多屏幕系统上这些宏返回错误的结果。多屏幕系统的 X ,Y 坐标可以为负值,而 LOWORD 宏和 HIWORD 宏把坐标认为是无符号数值。

Windows Vista:当创建包含标准的标题按钮自定义框架时,应该首先传递此消息到 DwmDefWindowProc 函数。允许桌面窗口管理器为标题按钮提供命中测试。如果 DwmDefWindowProc 函数没有处理该消息,之后可能需要处理该消息。


需求:
 

Minimum supported client

Windows 2000 专业版 [仅桌面应用程序]

Minimum supported server

Windows 2000 服务器版 [仅桌面应用程序]

Header

Winuser.h (包含于 Windows.h)

 

提示
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:1431 更新时间:2017-6-17 19:47:17  【打印此页
关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修