java - 通过 WinAPI 提取光标大小(Windows 10)

标签 java c++ swing winapi windows-10

我需要提取光标图像以在我的 Swing 应用程序 (Java) 中使用它。
首先,我找到了 similar question ,修改了答案中的代码片段,并得到了这个 sandbox application .
很快,它通过 JNA 和 WinAPI 获取光标图像,然后在 JFrame 上显示此图像并为此框架设置自定义光标。
在大多数情况下,此代码可以正常工作并适合我的任务。但是后来我发现,当用户更改光标的大小或颜色( Windows 10 feature )时,程序会提取一个无效的光标图像,该图像在颜色和大小上都与原始光标不匹配。
当用户有标准光标时:
enter image description here
当用户有例如粉红色光标然后比标准的大:
enter image description here
在这种情况之后,我决定做同样的沙箱应用程序,但是通过 C++ 和 WinAPI。我为此使用了答案 question ,但只解决了颜色的问题。
enter image description here
我认为主要的瓶颈是GetSystemMetrics函数返回默认光标大小 (32x32),并且在光标大小更改后不会更改。我为此找到了一些证明 here ,但我不确定。
所以我的问题是:
如何获得光标的实际大小?
非常感谢!

最佳答案

I think the main bottleneck is that GetSystemMetrics function returns default cursor size (32x32) and it doesn't change after the cursor's size changing.


当用户通过设置更改光标大小时。系统设置将此更改更新为注册表值 CursorBaseSizeHKEY_CURRENT_USER\Control Panel\Cursors .
您可以通过 WM_SETTINGCHANGE 在发生更改时收到通知或 SetWinEventHook ( EVENT_OBJECT_SHOW OBJID_CURSOR )。
然后阅读 CursorBaseSize注册值以获取新大小并使用 GetIconInfoEx 获取其他信息创建一个具有指定大小的游标。 ( CreateCursor )
更多引用:How can I get notified when the cursor changes?

关于java - 通过 WinAPI 提取光标大小(Windows 10),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63287678/

相关文章:

c++ - libevent:为什么 evutil_make_socket_nonblocking 在他们的例子中调用了两次

c++ - 防撞正则表达式?

java - 如何防止多次点击 JComboBox

java - 什么数组/集合对象对于 "contains"函数最有效?

java - 如何解决这个错误?我无法运行它,所以我不知道?

java - 在 map 中搜索耗时过长的广度优先搜索策略

java - 反射是否要求在字节码中写入文字字符串?

c++ - 结构成员初始化

java - 使用代码关闭 java 框架

java - 为什么在下面的示例中,KeyBindings(而不是 KeyListeners)检测到 ActionEvents?