我正在尝试从Visual C ++(Windows)中的资源文件(.rc)加载自定义光标。资源正在被正确编译到我的主.exe中,因为我可以成功加载其他资源类型(即自定义资源类型,如“PNG”)。
在我的.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
映射到正确的类型?
答案 0 :(得分:3)
我认为您应该为自定义游标定义实例参数,通常在加载标准游标时,可以将NULL作为第一个参数,但不能用于自定义游标。
e.g。
LoadCursor( hInstance, MAKEINTRESOURCE( IDI_CURSOR1 ) );
答案 1 :(得分:0)
是的,你是对的。要加载自定义游标,资源类型应为#12
。这意味着RT_GROUP_CURSOR
。在代码中使用此资源类型而不是RT_CURSOR