C++ 如何在Windows API中更改系统范围内的多个游标
我正在尝试使用C++ 如何在Windows API中更改系统范围内的多个游标,c++,winapi,C++,Winapi,我正在尝试使用SetSystemCursor替换多个系统游标。我的第一次调用更改了OCR\u NORMAL的光标,但随后的调用不起作用 HCURSOR hWaitCur = LoadCursor(NULL, IDC_WAIT); HCURSOR cursorCopy = CopyCursor(hWaitCur); SetSystemCursor(cursorCopy, OCR_NORMAL); // This works // Not working SetSystemCursor(curs
SetSystemCursor
替换多个系统游标。我的第一次调用更改了OCR\u NORMAL
的光标,但随后的调用不起作用
HCURSOR hWaitCur = LoadCursor(NULL, IDC_WAIT);
HCURSOR cursorCopy = CopyCursor(hWaitCur);
SetSystemCursor(cursorCopy, OCR_NORMAL); // This works
// Not working
SetSystemCursor(cursorCopy, OCR_APPSTARTING);
SetSystemCursor(cursorCopy, OCR_CROSS);
SetSystemCursor(cursorCopy, OCR_HAND);
SetSystemCursor(cursorCopy, OCR_HELP);
SetSystemCursor(cursorCopy, OCR_IBEAM);
SetSystemCursor(cursorCopy, OCR_NO);
SetSystemCursor(cursorCopy, OCR_WAIT);
一次更新多个系统游标的正确方法是什么?我找到了解决方案 由于
SetSystemCursor
在设置后会销毁cursorCopy
,因此每次调用都需要重新复制hWaitCur
/* ... */
HCURSOR cursorCopy = CopyCursor(cursor);
SetSystemCursor(cursorCopy, OCR_APPSTARTING);
cursorCopy = CopyCursor(cursor);
SetSystemCursor(cursorCopy, OCR_NORMAL);
cursorCopy = CopyCursor(cursor);
SetSystemCursor(cursorCopy, OCR_CROSS);
/* ... */
我找到了解决办法 由于
SetSystemCursor
在设置后会销毁cursorCopy
,因此每次调用都需要重新复制hWaitCur
/* ... */
HCURSOR cursorCopy = CopyCursor(cursor);
SetSystemCursor(cursorCopy, OCR_APPSTARTING);
cursorCopy = CopyCursor(cursor);
SetSystemCursor(cursorCopy, OCR_NORMAL);
cursorCopy = CopyCursor(cursor);
SetSystemCursor(cursorCopy, OCR_CROSS);
/* ... */
来自(我强调):
系统通过调用DestroyCursor函数销毁hcur。因此,hcur不能是使用LoadCursor函数加载的游标。要指定从资源加载的游标,请使用CopyCursor函数复制游标,然后将副本传递给SetSystemCursor
因此,您需要在每次通话前复制它:
SetSystemCursor(CopyCursor(hWaitCur), OCR_NORMAL);
SetSystemCursor(CopyCursor(hWaitCur), OCR_APPSTARTING);
SetSystemCursor(CopyCursor(hWaitCur), OCR_CROSS);
SetSystemCursor(CopyCursor(hWaitCur), OCR_HAND);
SetSystemCursor(CopyCursor(hWaitCur), OCR_HELP);
SetSystemCursor(CopyCursor(hWaitCur), OCR_IBEAM);
SetSystemCursor(CopyCursor(hWaitCur), OCR_NO);
SetSystemCursor(CopyCursor(hWaitCur), OCR_WAIT);
来自(我强调):
系统通过调用DestroyCursor函数销毁hcur。因此,hcur不能是使用LoadCursor函数加载的游标。要指定从资源加载的游标,请使用CopyCursor函数复制游标,然后将副本传递给SetSystemCursor
因此,您需要在每次通话前复制它:
SetSystemCursor(CopyCursor(hWaitCur), OCR_NORMAL);
SetSystemCursor(CopyCursor(hWaitCur), OCR_APPSTARTING);
SetSystemCursor(CopyCursor(hWaitCur), OCR_CROSS);
SetSystemCursor(CopyCursor(hWaitCur), OCR_HAND);
SetSystemCursor(CopyCursor(hWaitCur), OCR_HELP);
SetSystemCursor(CopyCursor(hWaitCur), OCR_IBEAM);
SetSystemCursor(CopyCursor(hWaitCur), OCR_NO);
SetSystemCursor(CopyCursor(hWaitCur), OCR_WAIT);