如何在c++中从资源文件中加载游标组?

How can I load a cursor group from resource file in C++?

本文关键字:加载 游标 源文件 c++ 资源      更新时间:2023-10-16

我试图从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。这里还有一个类型为"1"的RT_CURSOR。作为确认,我尝试使用:

再次查找资源
 FindResource( NULL, MAKEINTRESOURCE( IDI_CURSOR1 ), "#12" );

并没有发现错误。

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

我认为你应该有实例参数定义以及为您的自定义光标,通常当你加载标准游标,它是可以有NULL作为第一个参数,但不为自定义的

LoadCursor( hInstance, MAKEINTRESOURCE( IDI_CURSOR1 ) );

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