0

クラスTCustomControlに基づいて独自のコンポーネントを派生させました。.png 形式で保存されているコンポーネント ビットマップ リソースに埋め込む必要があります。プロジェクト ファイルresources.rcに次の内容を追加しました。

AP_LOGO RCDATA .\AP_logo_RGB_transparent.png

コンパイルは成功しました。コンポーネントはプロジェクトに静的にリンクされています。アプリケーションを実行すると、埋め込みリソースにアクセスしようとすると次のエラーがスローされます。

Project raised exception class EResNotFound with message 'Resource AP_LOGO not found'.

ソース コードの次の行は、ビットマップ リソースにアクセスします。

  Graphics::TBitmap *bmp = new Graphics::TBitmap();
  HINST handle = FindClassHInstance(__classid(TVctDiag2));
  bmp->LoadFromResourceName(handle, L"AP_LOGO"); // <----- exception apppers there

リソース エディタで実行可能ファイルを開くと、「AP_LOGO」という名前のリソースがありません。なんで?

4

1 に答える 1

0

TBitmap::LoadFromResource...()メソッドはBITMAPリソースのみを検索するため機能しませんが、RCDATA代わりにリソースを定義しています。リソースタイプを変更しない場合は、TResourceStream代わりに次を使用する必要があります。

HINST handle = FindClassHInstance(__classid(TVctDiag2));
TResourceStream *strm = new TResourceStream(handle, L"AP_LOGO", RT_RCDATA);
Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->LoadFromStream(strm);
delete strm;

そのサイフでは、そもそも PNG リソースを にロードすることはできませんTBitmap。PNG リソースを使用する必要がある場合は、代わりに のような PNG クラスを使用する必要がありますTPngImage

于 2012-09-24T20:03:52.913 に答える