0

我正在尝试使用资源文件中的 .cur 文件更改鼠标的光标。

当我尝试我的代码时,我收到此错误:

在 CleanResourceFiles.exe 中的 0x77EB7392 (ntdll.dll) 引发异常:0xC0000005:读取位置 0x00000066 时访问冲突。

这是代码:

HCURSOR curs = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_CURSOR1), 2, 0, 0, LR_LOADFROMFILE);
SetSystemCursor(curs, 32512);

注意:IDC_CURSOR1是我的光标,32512是经典箭头光标的 ID。我还包括<Windows.h>和我的resource.h.

我正在使用带有 Win10 的 Visual Studio Community 2017。

我尝试了其他功能,例如LoadCursor(). 上面的代码来自“VineMemz”。

最后,当我尝试LoadFromFile()使用文件路径更改光标时.cur,它可以工作。

4

1 回答 1

0

调用时LoadImage(),您指定了LR_LOADFROMFILE标志,因此该lpszName参数将被解释为指向以空字符结尾的字符串的指针,该字符串包含.cur要加载的文件的路径。但是,您传入的是资源 ID 号而不是文件路径字符串(我假设IDC_CURSOR1是 102 (0x66),这与错误消息中报告的内存地址一致)。LR_LOADFROMFILE从资源加载图像时,您需要摆脱标志。

此外,您需要在hinst参数中传入 EXE 的实际模块句柄,而不是 NULL(NULL 只能用于加载 OEM 定义的图像)。

还。你不应该使用“幻数”2onLoadImage()应该替换为IMAGE_CURSOR常数,on32512应该SetSystemCursor()替换为OCR_NORMAL常数。

尝试这个:

HCURSOR curs = (HCURSOR) LoadImage(GetModuleHandle(), MAKEINTRESOURCE(IDC_CURSOR1), IMAGE_CURSOR, 0, 0, 0);
SetSystemCursor(curs, OCR_NORMAL);
于 2018-06-13T20:20:29.387 回答