键盘和鼠标输入捕获消息 WM_NCHITTEST

WM_NCHITTEST message

https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-nchittest

为确定窗口的哪部分对应于特定的屏幕坐标,向窗口发送 WM_NCHITTEST 消息。

例如,当光标移动,鼠标按钮按下或释放,为响应如 WindowFromPoint 函数的调用,会发送该消息。

若鼠标未被捕获,则该消息被发送到光标下面的窗口;否则,该消息被发送到捕获鼠标的窗口。

 

窗口通过其 WindowProc 函数检索该消息。

 

#define WM_NCHITTEST                    0x0084

LRESULT CALLBACK WindowProc(

  _In_ HWND   hwnd,  _In_ UINT   uMsg,  _In_ WPARAM wParam, _In_ LPARAM lParam);

 

参数

wParam

未使用

lParam

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

返回值

DefWindowProc 函数返回下列值之一,表明光标热点的位置。

返回代码/值

描述

HTBORDER 

18

在无尺寸边界窗口的边界中。

HTBOTTOM

15

在可调整大小窗口的水平下边框中(用户点击鼠标可以调整垂直方向的窗口)

HTBOTTOMLEFT

16

在可调整大小窗口的边框左下角(用户点击鼠标以斜角调整窗口大小)

HTBOTTOMRIGHT

17

在可调整窗口的边框右下角(用户可点击鼠标以斜角调整窗口大小)

HTCAPTION

2

在标题栏中

HTCLIENT

1

在客户区域中

HTCLOSE

20

在 “Close“按钮中

HTERROR

-2

在屏幕背景上或窗口间的分割线上(与 HTNOWHERE 相同,但 DefWindowProc 会产生系统提示音以提示错误)。

HTGROWBOX

4

在尺寸框中(与 HTSIZE 相同)

HTHELP

21

在 "Help"按钮中

HTHSCROLL

6

在水平滚动条中

HTLEFT

10

在可调整大小窗口的左边框中(用户可点击鼠标以水平方式调整窗口大小)

HTMENU

5

在菜单中

HTMAXBUTTO                        N         9

在“Maximize”按钮中

HTMINBUTTON

8

在 “Minimize”按钮中

HTNOWHERE

0

在屏幕背景或窗口间的分割线上

HTREDUCE

8

在“Minimize”按钮中

HTRIGHT

11

在可调整大小窗口的有边框上(用户点击鼠标以水平方式调整窗口大小)

HTSIZE

4

在尺寸框中(与 HTGROWBOX 一样)

HTSYSMENU

3

在窗口菜单上或在子窗口“Close”按钮上

HTTOP

12

在窗口的顶部水平边框上

HTTOPLEFT

13

在窗口边框的左上角

HTTOPRIGHT

14

在窗口边框的右上角

HTTRANSPARENT

-1

在相同线程里由另一个窗口覆盖的窗口中(该消息被发送到相同线程的下层窗口直到其中一个窗口返回非 HTTRANSPARENT)

HTVSCROLL

7

在垂直滚动条中

HTZOOM

9

在 “Maximize”按钮中

 

Remarks

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

xPos = GET_X_LPARAM(lParam);

yPos = GET_Y_LPARAM(lParam);

 

如上提及,返回值的低位 short 是 x 坐标。高位 short 是 y 坐标(两者都是有符号值 signed , 因为在具有多监视器的系统上可能为负值)。若返回值被分配给一个变量,可以使用 MAKEPOINTS 宏从返回值获取 POINTS结构。可使用 GET_X_LPARAM GET_Y_LPARAM 宏提取 X 或 Y 坐标。

 

Important

不可使用 LOWORD 或 HIWORD 宏提取光标位置的 X 或 Y坐标,因为在具有多监视器的系统上返回不正确的结果。具有多监视器的系统可能会有负的 X 或 Y 坐标,而 LOWORD 和 HIWORD 对待坐标作为无符号数值。

 

Windows Vista: 当创建包含标准标题栏按钮的自定义框架时,该消息会首先被传递给 DwmDefWindowProc 函数。此确保桌面窗口管理器为标题栏按钮提供“hit-testing”。若 DwmDefWindowProc 未处理该消息,对该消息

WM_NCHITTEST 的进一步处理可能需要。

 

Requirements

最低限度支持客户端

Windows 2000 Professional ( desktop apps only )

最低限度支持服务器

Windows 2000 Server ( desktop apps only )

Header

Winuser.h ( include Windowsx.h )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值