Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Windows API中更改系统范围内的多个游标_C++_Winapi - Fatal编程技术网

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);