如何从C ++中的资源文件加载游标组?

时间:2011-11-25 06:25:44

标签: c++ windows winapi visual-c++ resources

我正在尝试从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.txtRT_GROUP_CURSOR。那里还有RT_CURSOR,类型为“1”。作为确认,我尝试使用以下方法再次找到资源:

 FindResource( NULL, MAKEINTRESOURCE( IDI_CURSOR1 ), "#12" );

确实发现它没有错误。

好的,所以光标正在加载,但LoadCursor()似乎没有找到类型“12”。它在寻找什么类型,如何让CURSOR映射到正确的类型?

2 个答案:

答案 0 :(得分:3)

我认为您应该为自定义游标定义实例参数,通常在加载标准游标时,可以将NULL作为第一个参数,但不能用于自定义游标。

e.g。

LoadCursor( hInstance, MAKEINTRESOURCE( IDI_CURSOR1 ) );

答案 1 :(得分:0)

是的,你是对的。要加载自定义游标,资源类型应为#12。这意味着RT_GROUP_CURSOR。在代码中使用此资源类型而不是RT_CURSOR