3

私は最近 WxWidgets (2.9.4) を使い始め、見つけたチュートリアルに取り組んでいましたが、画像を読み込めないようです。ハンドラー (PNG 用) を既に適切に使用しており、実行時に問題が発生します。以下は、プログラムを実行しようとしたときに表示されるポップアップのイメージです。

実行時エラー ウィンドウ

コードは次のとおりです。

wxPNGHandler *handler = new wxPNGHandler;
wxImage::AddHandler(handler);

wxBitmap exit;

exit.LoadFile(wxT("exit.png"), wxBITMAP_TYPE_PNG);

wxToolBar *toolbar = CreateToolBar();
toolbar->AddTool(wxID_EXIT, exit, wxT("Exit"));
toolbar->Realize();

Connect(wxID_EXIT, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(mainWindow::exitProg));

どんな助けでも大歓迎です。

編集:キャンセルをクリックすると、次のことが起こることを忘れていました。

2 番目のエラー

exit.png ファイルをビルド ディレクトリ (/Debug または /Release) とソース コード ディレクトリに配置しましたが、まだ認識されていません。

4

2 に答える 2

5

作業ディレクトリは何ですか?

Visual Studio を使用していて、インターフェイス (F5 または ctrl-F5 またはツールバーの小さな実行ボタン) を使用して実行している場合、作業ディレクトリはプロジェクト ファイルを含むフォルダーです。そこに画像ファイルをコピーしてみてください。

または、コマンド ウィンドウを開き、ビルド ディレクトリの 1 つに cd して、コマンド ラインからアプリを実行します。

一般に、この種の問題を回避するために、プロジェクトのプロパティを変更して、実行可能ファイルがビルド フォルダーの 1 つではなく、新しいフォルダーに保存されるようにします (通常、これを「bin」と呼びます - 私の UNIX ルートが表示されます!)。また、作業ディレクトリが bin フォルダーになるようにデバッグ プロパティを変更します。

この手法にはいくつかの利点があります。

  • リリース バージョンとデバッグ バージョンの両方が同じフォルダーを使用するため、イメージ ファイルなどの追加ファイルのコピーは 1 つだけ必要です。
  • ビルド フォルダーにあるすべての .obj ファイルに気を取られることなく、作業ディレクトリ内の実行可能ファイルと追加ファイルを簡単に確認できます。

IMHOこれは、デフォルト以外のプロジェクトプロパティを維持する上で少し面倒なことをするだけの価値があります。

于 2013-06-13T14:51:18.393 に答える
1

まず、 の内部wxToolBarで問題が発生しないように、 のリターン コードを常にチェックするLoadFile()か、 を使用wxBitmap::IsOk()して、ビットマップが正常にロードされたことを確認します。

第二に、あなたが行ったようにハンドラーを明示的に追加することはまったく問題ありませんが、可能な限り最小のプログラムを作成しようとしている場合を除き、より単純で実際の欠点がないため、wxInitAllImageHandlers()を呼び出すことをお勧めします。

最後に、実際の問題に対処するために、ロード元のパスにファイルが存在しないことは明らかです。もちろん、プログラム内の作業を直接変更しないように (または変更後に復元しないように) 注意し、ファイルを正しい場所に配置することで、これを解決できます。しかし、これはお気づきのとおり、エラーが発生しやすいため、常にリソースへのフル パスを使用することをお勧めします。それらを構築するには、wxStandardPaths、特にGetResourcesDir()メソッドが便利です。

于 2013-06-13T18:11:15.790 に答える