Win32 - 如何获取给定系统光标位图的偏移量?

Posted

技术标签:

【中文标题】Win32 - 如何获取给定系统光标位图的偏移量?【英文标题】:Win32 - How to get offsets for a given system cursor bitmap? 【发布时间】:2019-10-17 20:11:28 【问题描述】:

如果“点击点”是正确的名称,问题可以改写为“如何获得光标点击点?”。

通过结合使用LoadCursorW和GDI32函数的组合从游标全局资源中获取位图后。最后有了一个可以在另一个之上绘制的位图,我意识到我不知道如何根据给定光标的单击点位置来“移动”光标。

例如:虽然最典型的 ARROW 光标位图的点击点位于 [0, 0](左,上)。 HAND 光标,即出现在链接上的光标,向左平移了一点。

对于最典型的游标,由于是简单的2D概念,可以通过迭代所有位图像素来解决,将最上面的非透明像素作为点击点,或者如果有多个像素共享相同的 Y 坐标,然后返回一个 X 位于所有这些像素中心的值。

我希望没有任何光标指向下方的光标主题。

CURSORINFO 结构不包含此信息。它只为您提供当前鼠标 x 和 y 坐标。它们与您通过 GetCursorPos 等其他方式获得的坐标相同。

【问题讨论】:

docs.microsoft.com/en-us/windows/win32/api/winuser/… @user2120666 他们称之为热点,谢谢。我完全错过了。发布为答案,我会接受。 回答你的问题,我现在没空。 :) 【参考方案1】:

Windows API 已经在ICONINFO 结构中提供了这些信息,可以通过调用GetIconInfo 来填充。

该函数接受图标或光标的句柄。

xHotspot 和 yHotspot 字段包含光标的“热点”。通过将这些坐标与当前/所需的光标位置对齐,您可以将光标绘制在正确的位置。

【讨论】:

以上是关于Win32 - 如何获取给定系统光标位图的偏移量?的主要内容,如果未能解决你的问题,请参考以下文章

确定给定地址的页码和偏移量

Redis 中的 BitMaps(位图)命令详解

如何合并具有特定移位(偏移)的两个位图?

如何在 python 和 django 中使用 Pytz 根据给定的 UTC 偏移量转换数据和时间?

给定 UTC 时间戳和 UTC 偏移量,是不是可以在 Python 中获取时区?

Python 中给定 TimeZone 的标准 UTC 偏移量(无 DST)