- ベストアンサー
LoadBitmapでCStringを使いたい
VC++.NETでMFCアプリケーションを作っています。 CBitmap::LoadBitmapの定義では BOOL LoadBitmap(LPCTSTR lpszResourceName); とあるのですが、リソースネームはCString型の変数では指定できないのでしょうか? ビットマップリソースがIDB_BMP1~IDB_BMP5まであり、状況により表示する画像を切り替える、ということをしたいのですが。 (略) int n=1; CString fname; CBitmap bmp; fname.Fromat("IDB_BMP%d",n); bmp.LoadBitmap(fname); pOldbmp = myDC.SelectObject(&bmp); pDC->BitBlt(0, 300, 50, 77, &myDC, 0, 0, SRCCOPY); (略) とすると画像が読み込まれません。 なお、LoadBitmapのfnameの部分を IDB_BMP1 と置き換えれば、画像は正常に表示できます。 MFC自体が初めてなので、分かりやすいご説明をいただけると嬉しいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
リソースを指定するには defineで指定されたID(整数)を指示するのが一般的です LoadBitmap( LPCTSTR lpszResorceName )を使いたいのであれば リソースの定義でリソースIDを文字列で指示する必要があります リソースIDを文字列で表現するのはWindows3.1などの古い方式です 普通に ビットマップをインポートすると整数が割り当てられます リソースビューで IDB_BMP1を選択します プロパティウィンドウのID行の IDB_BMP1を "IDB_BMP01" (""も入力する) としてEnterを押します fname.Format("IDB_BITMAP%02d",n); といった具合にして見ましょう ほかの # "IDB_BMP1"といったdefineで設定したID名と同じ文字列では # コンパイラがうまく認識しないようです... ほかも同じように変更してみてください No1氏の回答のように IDを配列にしておいてアクセスするほうが一般的ですよ
その他の回答 (1)
- clsdi99
- ベストアンサー率63% (31/49)
CBitmapには BOOL LoadBitmap( UINT nIDResource ); というメソッドもありますよ。 UINT ids[] = {IDB_BMP1, IDB_BMP2, IDB_BMP3}; int n = 1; CBitmap bmp; bmp.LoadBitmap (ids[n]); でいけますよ。
お礼
なるほど、そうやればIDを代入できるんですね。 そこすら分かっていませんでした…。 とても参考になりました。 ありがとうございます。
お礼
""が必要だったんですね! 見事表示されました。 そして確かにdefineと同じIDではだめでした…。 ご丁寧な説明ありがとうございます。