如何在 Win32 中读取鼠标的外观(指针、调整大小等)

How to read the mouse's appearance (pointer, resizing etc) in Win32

有没有办法测量当前鼠标图像是否显示它处于调整大小模式?

我正在创建一个水平滑块,它只是一个子类静态(标签)。当用户将鼠标光标放在滑块(静态控件)上并单击并按住鼠标左键 (wm_lbuttondown) 时,我调用 Window 的 setcapture 函数。然后,当用户释放鼠标按钮 (wm_lbuttonup) 时,我调用 releasecapture。我的子类静态控制程序称为 onevent_label。 WndProc 处理其他一切的消息。

滑块运行良好,除非您完成一张幻灯片然后立即单击鼠标启动第二张幻灯片,而无需先将鼠标移动到其他区域或在另一个控件上单击鼠标。

我确定问题是因为第二次单击 wm_lbuttondown 事件在 wndproc 中触发(而不是 onevent_label)。鼠标图像似乎一直处于调整大小模式,但是,我在 wndproc 的 wm_lbuttondown 过程中测量了鼠标位置,发现它在我的静态标签控件(滑块)左侧一个像素。

一个简单的解决方法是简单地将 wm_lbuttondown 消息发送到静态控件,但是,我想让 wndproc 的 wm_lbuttondown 过程变得智能,并且只在适当的时候转发消息。

我决定执行此操作的最佳方法是检查 Windows 是否仍在显示鼠标处于调整大小模式以及光标位置是否合理地接近静态标签。

我似乎无法找到一种方法来衡量鼠标的图像是指针(通常情况)还是显示它正在调整控件的大小(左右水平箭头)。

B 计划是仅当鼠标位置在滑块的一两个像素范围内时才转发消息。在一个完美的世界中,我想知道鼠标显示水平调整大小图像并且在滑块的一两个像素内。

想法?注释?有没有办法确定鼠标是否显示其水平调整大小图像?

提前致谢。

回复: Is there a way for me to determine if the mouse is displaying its horizontal resize image? - 以下是您可以这样做的方法:

HCURSOR h = LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE));
CURSORINFO ci = {sizeof CURSORINFO };
GetCursorInfo(&ci);

并将 hci.hCursor 进行比较。此处列出了所有标准游标:https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadcursora