C ++でリソースファイルからカーソルグループをロードするにはどうしたらいいですか?

Visual C ++(Windows)のリソースファイル(.rc)からカスタムカーソルをロードしようとしています。他のリソースタイプ(「PNG」などのカスタムリソースタイプ)を正常に読み込むことができるため、リソースはメインの.exeに正しくコンパイルされています。

私の.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 をどうすればよいですか?

0

2 答え

私はあなたがカスタムカーソルのために定義されたインスタンス引数を持っているべきだと思います。通常、標準のカーソルをロードすると、最初の引数としてNULLを持つことはできますが、カスタムのものはNULLにできません。

例えば

LoadCursor( hInstance, MAKEINTRESOURCE( IDI_CURSOR1 ) );
3
追加された
ありがとう。私もそれを試みた。運がない。
追加された 著者 Yelmond,
これは脳の死のもう一つのケースです。私はインスタンスハンドルの代わりにモジュールハンドルを使用していました。あなたは正しかった。それは今働く。
追加された 著者 Yelmond,

Yes, you are right. To load a custom cursors Resource type should #12. Which means RT_GROUP_CURSOR. Use this resource type in your code instead of RT_CURSOR

0
追加された