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

Win32 - How to get offsets for a given system cursor bitmap?

如果 "click point" 是正确的名称,问题可以改写为 "How to get a cursor click point?"。

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

例如:最典型的ARROW光标位图的点击点在[0, 0](左上)。出现在链接上方的 HAND 光标有点向左移动。

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

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

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

Windows API 已在 ICONINFO structure, that can be filled by calling GetIconInfo 中提供此信息。

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

xHotspot 和 yHotspot 字段包含光标的 "hotspot"。通过将这些坐标与 current/desired 光标位置对齐,您可以在正确的位置绘制光标。