相关疑难解决方法(0)

WinAPI 获取鼠标光标图标

我想在 Windows 中获取光标图标。我认为我在这里使用的语言不是很重要,所以我将只使用我尝试使用的 WinAPI 函数编写伪代码:

c = CURSORINFO.new(20, 1, 1, POINT.new(1,1));
GetCursorInfo(c); #provides correctly filled structure with hCursor

DrawIcon(GetWindowDC(GetForegroundWindow()), 1, 1, c.hCursor);
Run Code Online (Sandbox Code Playgroud)

所以这部分工作正常,它在活动窗口上绘制当前光标。但这不是我想要的。我想得到一个像素数组,所以我应该在内存中绘制它。

我正在尝试这样做:

hdc = CreateCompatibleDC(GetDC(0)); #returns non-zero int
canvas = CreateCompatibleBitmap(hdc, 256, 256); #returns non-zero int too

c = CURSORINFO.new(20, 1, 1, POINT.new(1,1));
GetCursorInfo(c);

DrawIcon(hdc, 1, 1, c.hCursor); #returns 1
GetPixel(hdc, 1, 1); #returns -1
Run Code Online (Sandbox Code Playgroud)

为什么 GetPixel() 不返回 COLORREF?我错过了什么?

我对 WinAPI 不是很有经验,所以我可能犯了一些愚蠢的错误。

c windows mouse winapi mouse-cursor

4
推荐指数
1
解决办法
4508
查看次数

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

我需要提取光标图像以便在我的 swing 应用程序(Java)中使用它。

首先,我发现了类似的问题,修改了答案中的代码片段,并得到了这个沙箱应用程序

很快,它通过 JNA 和 WinAPI 获取光标图像,然后在 JFrame 上显示该图像并为此框架设置自定义光标。

在大多数情况下,此代码可以正常工作并且适合我的任务。但后来我发现,当用户更改光标的大小或颜色Windows 10 功能)时,程序会提取一个无效的光标图像,该图像在颜色和大小上均与原始光标不匹配。

当用户有标准光标时:

在此输入图像描述

例如,当用户的粉色光标大于标准光标时:

在此输入图像描述

在这种情况之后,我决定做同样的沙箱应用程序,但通过 C++ 和 WinAPI。我使用了这个问题的答案,但只解决了颜色问题。

在此输入图像描述

我认为主要瓶颈是GetSystemMetrics函数返回默认光标大小(32x32),并且在光标大小更改后它不会更改。我在这里找到了一些证明,但我不确定。

所以我的问题是:

如何获取光标的实际大小?

预先非常感谢!

c++ java winapi swing windows-10

4
推荐指数
1
解决办法
1341
查看次数

标签 统计

winapi ×2

c ×1

c++ ×1

java ×1

mouse ×1

mouse-cursor ×1

swing ×1

windows ×1

windows-10 ×1