BaL*_*LiK 4 c++ java winapi swing windows-10
我需要提取光标图像以便在我的 swing 应用程序(Java)中使用它。
首先,我发现了类似的问题,修改了答案中的代码片段,并得到了这个沙箱应用程序。
很快,它通过 JNA 和 WinAPI 获取光标图像,然后在 JFrame 上显示该图像并为此框架设置自定义光标。
在大多数情况下,此代码可以正常工作并且适合我的任务。但后来我发现,当用户更改光标的大小或颜色(Windows 10 功能)时,程序会提取一个无效的光标图像,该图像在颜色和大小上均与原始光标不匹配。
当用户有标准光标时:
例如,当用户的粉色光标大于标准光标时:
在这种情况之后,我决定做同样的沙箱应用程序,但通过 C++ 和 WinAPI。我使用了这个问题的答案,但只解决了颜色问题。
我认为主要瓶颈是GetSystemMetrics函数返回默认光标大小(32x32),并且在光标大小更改后它不会更改。我在这里找到了一些证明,但我不确定。
所以我的问题是:
如何获取光标的实际大小?
预先非常感谢!
我认为主要瓶颈是 GetSystemMetrics 函数返回默认光标大小(32x32),并且在光标大小更改后它不会更改。
当用户通过设置更改光标大小时。系统设置将将此更改更新为CursorBaseSize下的注册表值HKEY_CURRENT_USER\Control Panel\Cursors。
WM_SETTINGCHANGE当发生更改时,您可以通过或SetWinEventHook( EVENT_OBJECT_SHOW, )收到通知OBJID_CURSOR。
然后读取CursorBaseSize寄存器值以获取新的大小并获取其他信息用于GetIconInfoEx创建具有指定大小的游标。( CreateCursor)
更多参考:当光标发生变化时如何收到通知?