在Windows 8上使窗口光标变大

时间:2014-06-09 09:56:31

标签: c++ windows-8.1

我想让窗户光标更大。我有一个c ++ windows应用程序,其中包含以下代码,我从类似的问题中劫持了这些代码。我正在从.cur文件加载游标。

已尝试此链接:The biggest size of Windows Cursor 无法确定答案是“不可能”还是“可能”。

我试过这个,在Windows 8上工作 - >我正在加载128x128文件,它仍然显得非常小(32x32)。任何人都可以发布实际上适用于他们的东西吗?

// load cursor resource into hCursor
HCURSOR ghTouchCursor = (HCURSOR)LoadImage(NULL, L"NormalHand.cur", IMAGE_CURSOR, 0,0, LR_LOADFROMFILE);
// must copy cursor, windows is a pita...
HCURSOR ghCopyTouchCursor = CopyCursor(ghTouchCursor);
// set the cursor as the new full-screen cursor
SetSystemCursor(ghCopyTouchCursor, 32512);

我也试过像这样调用加载图像,没有区别。

HCURSOR ghTouchCursor = (HCURSOR)LoadImage(NULL, L"NormalHand.cur", IMAGE_CURSOR, 128,128, LR_LOADFROMFILE);

GetSystemMetrics(SM_CXCURSOR)返回32但是根据官方网站: “SetSystemCursor ...您可以使用此功能设置任何大小的光标。”

似乎对“不可能”有共识。

2 个答案:

答案 0 :(得分:2)

最大光标大小取决于系统

系统支持的游标大小可以通过调用GetSystemMetrics来调用,SM_CXCURSOR调用 width SM_CYCURSOR调用身高

正如 msdn 所述,这是系统在创建游标时可以使用的唯一大小,这意味着如果您在调用{{{}时使用更大的大小3}}将被忽略。


任何替代解决方案?

如果你想要一个更大的光标,但系统阻止你创建一个光标,另一种方法是隐藏当前光标,并让图像漂浮在光标实际所在的位置。

这样用户会认为光标已经改变,但实际上光标是不可见的,并且已经在其位置设置了图像。

答案 1 :(得分:0)

我知道这个问题是针对 Windows 8 的,但是这个问题在 2021 年仍然出现,并且在 Windows 10 中很有可能有一个大的光标。

LoadImage (here) 的宽度和高度参数的最新文档指出:

<块引用>

图标或光标的宽度(以像素为单位)。如果此参数为零且 fuLoad 参数为 LR_DEFAULTSIZE,则该函数使用 SM_CXICON 或 SM_CXCURSOR 系统度量值来设置宽度。如果此参数为零且未使用 LR_DEFAULTSIZE,则该函数使用实际资源宽度。

因此,如果您为宽度和高度传入 0 而不要传入 LR_DEFAULTSIZE,它将使用资源的大小。因此,如果您的光标中有 64x64 的图像,即使系统指针为 32x32,它也会以该大小显示。

示例:

HCURSOR custom_cursor = (HCURSOR)LoadImage(hInstance, MAKEINTRESOURCE(IDC_CURSOR1), IMAGE_CURSOR, 0, 0, 0);
SetCursor(custom_cursor);

作为奖励,这也符合 Windows 中的“轻松访问”设置,因此如果用户将默认光标设置得更大,则光标会增大。