C++ WinAPI SetSystemCursor和LoadCursorFrom-如何设置默认光标?
我通过以下方式设置自己的光标:C++ WinAPI SetSystemCursor和LoadCursorFrom-如何设置默认光标?,c++,winapi,cursor,C++,Winapi,Cursor,我通过以下方式设置自己的光标: HCURSOR hCurStandard = LoadCursorFromFile(TEXT("cursor.cur")); SetSystemCursor(hCurStandard, 32512); DestroyCursor(hCurStandard); 如何返回并设置默认光标 这不起作用: SetSystemCursor(LoadCursor(0, IDC_ARROW), 32512); ----编辑----- 这适用于除IDC_ARROW之外的所有游
HCURSOR hCurStandard = LoadCursorFromFile(TEXT("cursor.cur"));
SetSystemCursor(hCurStandard, 32512);
DestroyCursor(hCurStandard);
如何返回并设置默认光标
这不起作用:
SetSystemCursor(LoadCursor(0, IDC_ARROW), 32512);
----编辑-----
这适用于除IDC_ARROW之外的所有游标,根据
设置系统游标
文档:
要指定从资源加载的游标,请使用
CopyCursor函数,然后将副本传递给SetSystemCursor
因此,这样做可能会解决您原来的问题:
HCURSOR hCurDef = CopyCursor(LoadCursor(0, IDC_ARROW));
SetSystemCursor(hCurDef, OCR_NORMAL);
DestroyCursor(hCurDef);
如果不起作用,您可以存储现有光标的文件名,您可以通过读取注册表(HKEY\U CURRENT\U USER\Control Panel\Cursors\Arrow
)获取该文件名,或者作为快捷方式使用GetProfileString
:
TCHAR chCursorFile[MAX_PATH];
GetProfileString(TEXT("Cursors"), TEXT("Arrow"), TEXT(""), chCursorFile, MAX_PATH);
要恢复光标,请使用LoadCursorFromFile
在中加载上一个光标,并使用SetSystemCursor
进行设置
请注意,调用
SetSystemCursor
不会更新注册表,因此您的自定义光标无法在重新启动后继续使用。根据SetSystemCursor
文档:
要指定从资源加载的游标,请使用
CopyCursor函数,然后将副本传递给SetSystemCursor
因此,这样做可能会解决您原来的问题:
HCURSOR hCurDef = CopyCursor(LoadCursor(0, IDC_ARROW));
SetSystemCursor(hCurDef, OCR_NORMAL);
DestroyCursor(hCurDef);
如果不起作用,您可以存储现有光标的文件名,您可以通过读取注册表(HKEY\U CURRENT\U USER\Control Panel\Cursors\Arrow
)获取该文件名,或者作为快捷方式使用GetProfileString
:
TCHAR chCursorFile[MAX_PATH];
GetProfileString(TEXT("Cursors"), TEXT("Arrow"), TEXT(""), chCursorFile, MAX_PATH);
要恢复光标,请使用LoadCursorFromFile
在中加载上一个光标,并使用SetSystemCursor
进行设置
请注意,调用
SetSystemCursor
不会更新注册表,因此您的自定义光标在重新启动后将无法生存。问题在于您可能使用SetSystemCursor函数更改标准箭头光标。此函数实际上使用您提供的HCURSOR覆盖系统游标,因此当您使用IDC_ARROW调用LoadCursor时,它将加载您的自定义游标。这就解释了你的程序的奇怪行为。为了避免这种情况,您应该在更改默认系统光标之前保存它
HCURSOR def_arrow_cur = CopyCursor(LoadCursor(0, IDC_ARROW));
//now you have a copy of the original cursor
SetSystemCursor(LoadCursorFromFile("my_awesome_cursor.cur"),OCR_NORMAL);
...
SetSystemCursor(def_arrow_cur,OCR_NORMAL);//restore the good old arrow
我知道这是一个迟来的答案,但我希望有人会觉得这很有用。问题是您可能使用SetSystemCursor函数来更改标准箭头光标。此函数实际上使用您提供的HCURSOR覆盖系统游标,因此当您使用IDC_ARROW调用LoadCursor时,它将加载您的自定义游标。这就解释了你的程序的奇怪行为。为了避免这种情况,您应该在更改默认系统光标之前保存它
HCURSOR def_arrow_cur = CopyCursor(LoadCursor(0, IDC_ARROW));
//now you have a copy of the original cursor
SetSystemCursor(LoadCursorFromFile("my_awesome_cursor.cur"),OCR_NORMAL);
...
SetSystemCursor(def_arrow_cur,OCR_NORMAL);//restore the good old arrow
我知道这是一个迟来的答案,但我希望有人会觉得这很有用。您是否检查了
SetSystemCursor
的返回值?如果为0,请调用GetLastError
查看错误是什么。SetSytemCursor返回1,但无任何更改OK。文档说你不应该使用LoadCursor
调用SetSystemCursor
请看这里:下面的答案可能就是你需要做的。你说得对,我编辑了我的帖子,但仍然有一些奇怪的问题。你检查了SetSystemCursor
的返回值了吗?如果为0,请调用GetLastError
查看错误是什么。SetSytemCursor返回1,但无任何更改OK。文档说你不应该使用LoadCursor
调用SetSystemCursor
参见这里:所以下面的答案可能是你需要做的。你说得对,我编辑了我的帖子,但仍然有一些奇怪的问题。