让windows 8上的光标变大

Make the windows cursor bigger on windows 8

本文关键字:光标 windows      更新时间:2023-10-16

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

已尝试此链接:Windows光标的最大大小无法决定答案是"不可能"还是"可能"。

我已经尝试过了,它在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…您可以使用此函数设置任意大小的游标。"

似乎大家都认为"不可能"。

最大游标大小取决于系统

系统支持的光标的像素大小可以通过调用GetSystemMetrics来获取,SM_CXCURSOR调用宽度SM_CYCURSOR调用高度

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


有其他解决方案吗?

如果你想要一个更大的光标,但是系统不允许你创建一个,另一个选择是隐藏当前的光标,并在光标实际所在的地方浮动一个图像。

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

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

关于LoadImage(这里)的宽度和高度参数的最新文档说明:

图标或光标的宽度,以像素为单位。如果该参数为零,且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中的易于访问设置,因此如果用户将默认光标设置为更大,则光标的大小将增加。