• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC++とResEditの使い方 .rcファイルからの画像の読み込み)

VC++とResEditを使って.rcファイルから画像を読み込む方法

このQ&Aのポイント
  • Visual C++2008 Express EditionとResEditを使用して、.rcファイルからビットマップ画像を読み込む方法を知りたい。
  • 従来はLoadGraph関数を使用してビットマップを読み込んでいたが、.rcファイル内に保存されたIDB_BITMAP1という名前のビットマップを呼び出す方法がわからない。
  • DXライブラリを使用しているため、LoadGraph関数ではIDB_BITMAP1を読み込むことができない。どのようにすれば.rcファイルのビットマップを呼び出すことができるのか知りたい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

> 戻り値の確認 VCを使用しているのですからブレークポイントを使うなりしてプログラムの実行を止めて確認してください。(やりかたはググればたくさんヒットします。) もしくは g=LoadGraphToResource(IDB_BITMAP7); AppLogAdd("g = %d\n", g); とすればprintfを使うみたいに「出力」ウィンドウに文字列の出力が出来ます。 > 上記のようなテキスト形式のファイルを作成していなかったことが原因でしょうか?。 違います。 rcファイルの中身は、私が添付したようなテキストファイルです。 ResEdtはその内容を読んで、見た目わかりやすいように表示してくれているだけです。 rcファイルをメモ帳等で開けばその内容を見ることが出来ます。 まさかとは思いますが、ResEdtが出力したrcファイルをプロジェクトに組み込み忘れてないですよね??(組み込み忘れはコンパイルエラーにもならないしLoadGraphToResourceで-1にもならないことを確認しました。)

okwave_q_a
質問者

お礼

mistmoon79さん ありがとうございます。 戻り値の確認のソースを追加しようとして、ソースをいじっていたところ、画像が表示されるようになりました。 (正確には、変更前のソースでは、LoadGraphではなくLoadDivGraphを使っていました) 画像が表示されなかった原因は、 (1)元のソース int ghandle=LoadDivGraph("ビットマップファイル名.bmp",○,△,□,▽,g_●●);で読み込み、 DrawGraph(0,0,g_●●,TRUE);で表示 (2).rcからデータを呼び出し、正しく表示されなかったソース int ghandle=LoadGraphToResource(IDB_BITMAP7);で読み込み、 DrawGraph(0,0,g_●●,TRUE);で表示 (3).rcからデータを呼び出し、正しく表示されるソース int g_●●=LoadGraphToResource(IDB_BITMAP7);で読み込み、 DrawGraph(0,0,g_●●,TRUE);で表示 という風に読み込みんだデータの名前を表示のときに使っていないことが原因だったようです。 (rcファイルの中身は、右クリック→コードの表示で表示できることも今回わかりました) LoadGraphToResourceの存在を教えていただき、そしてその使い方についてアドバイスを教えていただきました。 何度も質問しなおしたたびに丁寧な返答ありがとうございました。 無事解決いたしました。

その他の回答 (3)

回答No.3

関数の使い方は問題ないと思います。 LoadGraphToResourceの戻り値を確認してください。 -1になっているようであればロードに失敗していますので、リソースの設定に問題があるように思います。 リソースファイル(.rc)の中身は以下のような感じになっていますか? // Generated by ResEdit 1.4.8 // Copyright (C) 2006-2009 // http://www.resedit.net #include <windows.h> #include <commctrl.h> #include <richedit.h> #include "resource.h" // // Bitmap resources // IDB_BITMAP1 BITMAP ".\\BlendGraph.bmp"

okwave_q_a
質問者

お礼

.rcファイルの中身の確認方法を覚えることができ、 戻り値の確認という方法で読み込みができたかどうかをチェックするという方法があるということも覚えることができました。 ありがとうございました。

okwave_q_a
質問者

補足

戻り値の確認方法が分からないので何とも言えないのですが、 とりあえず現在の状況を早く伝えたほうがよいと思うので補足します。 .rcの中身なんですが、クリックするとResEditが起動する設定にしているのですが、mistmoon79さんが書かれているようなテキスト形式のファイルはないようです。 .rcをクリックしたときのResEditの画面を添付します。 上記のようなテキスト形式のファイルを作成していなかったことが原因でしょうか?。

回答No.2

関数が違います。 リソースを使用する場合はLoadGraphToResource関数です。 DXLib.hの中身をよく読んでください。

okwave_q_a
質問者

お礼

LoadGraphToResource関数を教えていただきありがとうございました。 私1人では決してこの関数を見つけることはできなかったと思います。

okwave_q_a
質問者

補足

mistmoon79さん、ありがとうございます。 DXライブラリ置き場にも載っていない関数のようで、はじめて知りました。 早速ネットで検索してみて関数を書き直してみたのですが、 g=LoadGraphToResource(109); もしくは、 g=LoadGraphToResource(IDB_BITMAP7); としてビルドしてもエラーは出ないのですが、 実行した画面を見ると画像が表示されず、 うまく画像が読み込めていない(DrawGraph関数を使用 )ようです。 エラーが出ないのでLoadGraphToResource関数書き方は間違っていないと思うのですが、どこに問題があるのでしょうか? もし気が付かれたら教えてください。 ちなみにresource.hの中身は、以下の通りです。 #ifndef IDC_STATIC #define IDC_STATIC (-1) #endif #define IDI_ICON1 102 #define IDB_BITMAP1 103 #define IDB_BITMAP2 104 #define IDB_BITMAP3 105 #define IDB_BITMAP4 106 #define IDB_BITMAP5 107 #define IDB_BITMAP6 108 #define IDB_BITMAP7 109 #define IDB_BITMAP8 111

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.1

GetModuleHandleとLoadImageで読み込めませんか?

okwave_q_a
質問者

お礼

GetModuleHandleとLoadImageを使うというやり方を教えていただいたのですが、DXライブラリで画像の読み込みをする方法を使っていたため、アドバイス内容を十分に生かすことができませんでした。 今後、DXライブラリを使わないプログラミングをする際にアドバイス内容が生かせると思います。 回答ありがとうございました。

okwave_q_a
質問者

補足

reset_catさん回答ありがとうございます。 GetModuleHandleとLoadImageで検索してみましたところ、 hBmp = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); 上記のようなソースになるようです。 ※参照サイト→ http://www.ichigo-cafe.com/prog_tips/08_resrc/resrc.html ソースの内容が理解できないため、実際に自分のプログラム(wi32アプリケーション、DXライブラリ使用)にどのように適用するかということを考えた場合に、 どのようにアレンジすればいいのかということがよくわかりません。 何かヒントはないでしょうか? DXライブラリのLoadGraph関数を使わないほうがスムーズにいくのでしょうか?

関連するQ&A

専門家に質問してみよう