如何从C++资源文件加载游标组?
问题描述:
我正尝试从Visual C++(Windows)中的资源文件(.rc)加载自定义光标。该资源正在正确编译到我的主要.exe,因为我可以成功加载其他资源类型(即自定义资源类型,如“PNG”)。如何从C++资源文件加载游标组?
在我的.rc文件我有:
#define IDI_CURSOR1 1000
IDI_CURSOR1 CURSOR "Resources\\Cursors\\MainCursor.cur"
在我.cpp文件我有:
HCURSOR mainCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDI_CURSOR1));
但LoadCursor()
总是返回NULL
。调用HRESULT_FROM_WIN32(GetLastError())
将返回“在资源文件中找不到指定的资源类型”。现在
,我尝试使用加载它:
FindResource(NULL, MAKEINTRESOURCE(IDI_CURSOR1), L"CURSOR");
,但我得到了同样的错误。
挖掘周围后,我找到了一种方法来打印我的模块中的所有资源,我发现我的光标。它正在加载,但类型为“12”,根据此:http://www.csn.ul.ie/~caolan/pub/winresdump/winresdump/doc/resfmt.txt是RT_GROUP_CURSOR
。那里还有一个RT_CURSOR
,它是类型“1”。作为确认,我试图再次找到资源:
FindResource(NULL, MAKEINTRESOURCE(IDI_CURSOR1), "#12");
并确实发现它没有错误。
好吧,所以光标正在加载,但LoadCursor()
似乎并没有寻找类型“12”。它寻找什么类型,我如何得到CURSOR
映射到正确的类型?
答
我想你应该为你的自定义游标定义实例参数,通常当你加载标准游标时,可以将NULL作为第一个参数,而不是自定义游标。
例如
LoadCursor(hInstance, MAKEINTRESOURCE(IDI_CURSOR1));
答
是的,你是对的。加载自定义游标资源类型应为#12
。这意味着RT_GROUP_CURSOR
。在您的代码中使用此资源类型而不是RT_CURSOR
谢谢。我也尝试过。没有运气。 – Yelmond
划痕,这是脑死亡的另一种情况。我正在使用模块句柄,而不是实例句柄。你是对的。它现在有效。 – Yelmond