WM_POINTERUP 消息
在窗口工作区上建立接触的指针中断联系人时发布。 此输入消息以指针进行接触的窗口为目标,指针在该时间点隐式捕获到窗口,以便窗口继续接收输入消息,包括指针 的WM_POINTERUP 通知,直到它中断接触。
窗口通过其 WindowProc 函数接收此消息。
![重要提示]
桌面应用应可感知 DPI。 如果你的应用无法识别 DPI,则指针消息和相关结构中包含的屏幕坐标可能会由于 DPI 虚拟化而显示不准确。 DPI 虚拟化为非 DPI 感知且默认处于活动状态的应用程序提供自动缩放支持, (用户可以) 将其关闭。 有关详细信息,请参阅 编写高 DPI Win32 应用程序。
#define WM_POINTERUP 0x0247
参数
-
wParam
-
包含有关指针的信息。 使用以下宏从 wParam 参数检索信息。
GET_POINTERID_WPARAM (wParam) :指针标识符。
IS_POINTER_NEW_WPARAM (wParam) :一个标志,指示此消息是否表示新指针生成的第一个输入。
IS_POINTER_INRANGE_WPARAM (wParam) :一个标志,指示此消息在其生存期内是否由指针生成。 未在指示指针具有左检测范围的消息上设置此标志
IS_POINTER_INCONTACT_WPARAM (wParam) :一个标志,指示此消息是否由与窗口图面接触的指针生成。 未在指示悬停指针的消息上设置此标志。
IS_POINTER_PRIMARY_WPARAM (wParam) : 指示此指针已指定为主指针。
IS_POINTER_FIRSTBUTTON_WPARAM (wParam) :指示是否存在主操作的标志。
- 这类似于鼠标左键向下键。
- 触摸指针在与数字化器表面接触时将具有此设置。
- 当笔指针与数字化器表面接触且未按下按钮时,将具有此设置。
IS_POINTER_SECONDBUTTON_WPARAM (wParam) :指示是否存在辅助操作的标志。
- 这类似于鼠标右键向下键。
- 笔指针在按下笔筒按钮的情况下与数字化器表面接触时,将具有此设置。
IS_POINTER_THIRDBUTTON_WPARAM (wParam) :一个标志,指示是否存在基于指针类型的一个或多个第三级操作;希望响应第三个操作的应用程序必须检索特定于指针类型的信息,以确定按下了哪些第三个按钮。 例如,应用程序可以通过调用 GetPointerPenInfo 并检查指定按钮状态的标志来确定笔的按钮状态。
IS_POINTER_FOURTHBUTTON_WPARAM (wParam) :一个指示指定指针是否执行第四个操作的标志。 希望响应第四个操作的应用程序必须检索特定于指针类型的信息,以确定是否按下了第一个扩展鼠标 (XButton1) 按钮。
IS_POINTER_FIFTHBUTTON_WPARAM (wParam) :一个指示指定指针是否执行第五个操作的 标志 。 希望响应第五个操作的应用程序必须检索特定于指针类型的信息,以确定是否按下了第二个扩展鼠标 (XButton2) 按钮。
有关更多详细信息 ,请参阅指针标志 。
注意
悬停指针未设置任何按钮标志。 这类似于鼠标移动时没有按下鼠标按钮。 应用程序可以确定悬停笔的按钮状态,例如,通过调用 GetPointerPenInfo 并检查指定按钮状态的标志。
-
lParam
-
包含指针的点位置。
注意
由于指针可能会在非普通区域上与设备接触,因此此点位置可能是更复杂的指针区域的简化。 应用程序应尽可能使用完整的指针区域信息,而不是点位置。
使用以下宏检索点的物理屏幕坐标。
- GET_X_LPARAM (lParam) :x (水平点) 坐标。
- GET_Y_LPARAM (lParam) :y (垂直点) 坐标。
返回值
如果应用程序处理此消息,则它应返回零。
如果应用程序不处理此消息,则应调用 DefWindowProc。
备注
![重要提示]
当窗口丢失对指针的捕获并收到 WM_POINTERCAPTURECHANGED 通知时,它通常不会收到任何进一步的通知。 因此,请务必不要基于均匀配对 WM_POINTERDOWN/WM_POINTERUP 或 WM_POINTERENTER/WM_POINTERLEAVE 通知做出任何假设。
每个指针在其生存期内都有一个唯一的指针标识符。 指针的生存期从首次检测到指针时开始。
如果检测到悬停指针,则会生成 WM_POINTERENTER 消息。 如果检测到非悬 停指针, 则生成后跟 WM_POINTERENTER 消息的WM_POINTERDOWN消息。
指针在其生存期内,可能会在其悬停或接触时生成一系列 WM_POINTERUPDATE 消息。
指针的生存期在不再被检测到时结束。 这会生成 WM_POINTERLEAVE 消息。
指针中止时, 将设置POINTER_FLAG_CANCELED 。
当未捕获的指针移动超出窗口边界时,也可能生成 WM_POINTERLEAVE 消息。
若要获取指针的水平和垂直位置,请使用以下命令:
使用以下代码获取水平和垂直位置:
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
MAKEPOINTS 宏还可用于将 lParam 参数转换为 POINTS 结构。
GetKeyState 函数可用于确定与此消息关联的键盘修饰符键状态。 例如,若要检测是否按下了 Alt 键,检查 GetKeyState 是否 (VK_MENU) < 0。
如果应用程序不处理此消息, DefWindowProc 可能会生成一个或多个 WM_GESTURE消息,前提是来自此的输入序列以及可能的其他指针被识别为手势。 如果未识别手势, DefWindowProc 可能会生成鼠标输入。
如果应用程序有选择地使用某些指针输入并将其余输入传递给 DefWindowProc,则生成的行为是不确定的。
使用 GetPointerInfo 函数检索与此消息相关的进一步信息。
示例
下面的代码示例演示如何检索与此消息关联的指针的 x 和 y 位置。
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
// process pointer up, similar to mouse button up
下面的代码示例演示如何获取与此消息关联的指针 ID。
POINTER_INFO pointerInfo;
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
// Retrieve common pointer information
if (!GetPointerInfo(pointerId, &pointerInfo))
{
// failure, call GetLastError()
}
else
{
// success, process pointerInfo
}
下面的代码示例演示如何处理与此消息关联的不同指针类型。
POINTER_TOUCH_INFO touchInfo;
POINTER_PEN_INFO penInfo;
POINTER_INFO pointerInfo;
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
POINTER_TYPE pointerType = PT_POINTER;
// default to unhandled to enable call to DefWindowProc
fHandled = FALSE;
if (!GetPointerType(pointerId, &pointerType))
{
// failure, call GetLastError()
// set PT_POINTER to fall to default case below
pointerType = PT_POINTER;
}
switch (pointerType)
{
case PT_TOUCH:
// Retrieve touch information
if (!GetPointerTouchInfo(pointerId, &touchInfo))
{
// failure, call GetLastError()
}
else
{
// success, process touchInfo
// mark as handled to skip call to DefWindowProc
fHandled = TRUE;
}
break;
case PT_PEN:
// Retrieve pen information
if (!GetPointerPenInfo(pointerId, &penInfo))
{
// failure, call GetLastError()
}
else
{
// success, process penInfo
// mark as handled to skip call to DefWindowProc
fHandled = TRUE;
}
break;
default:
if (!GetPointerInfo(pointerId, &pointerInfo))
{
// failure.
}
else
{
// success, proceed with pointerInfo.
fHandled = HandleGenericPointerMessage(&pointerInfo);
}
break;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows 8 [仅限桌面应用] |
最低受支持的服务器 |
Windows Server 2012 [仅限桌面应用] |
标头 |
|
另请参阅
反馈
提交和查看相关反馈