dポイントプレゼントキャンペーン実施中!

お世話になっております。C++初心者です。
とある開発でVC++6.0のMFCを利用して画像表示を行う作業をしています。
リソースファイルを使用せず、
外部の画像ファイルを読み込みピクチャーボックスに表示しなければならないのですが、
下記の関数を呼び、BMPファイルを読み込み、
NULLの場合はエラーメッセージを表示するようにしているのですが、
必ずNULLが返ってきてしまいます。

何が問題なのかもわからず苦戦しております。
知識不足で申し訳ないのですが、お願いします。

【疑問点】
・画像ファイルの指定は絶対パス?相対パス?

***問題の箇所***

HBITMAP hBmp; // ビットマップハンドル

// ビットマップのハンドル取得
hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

// ハンドルのチェック
if(hBmp == NULL)
{
  AfxMessageBox("読み込みに失敗しました");
  return ;
}

A 回答 (1件)

>・画像ファイルの指定は絶対パス?相対パス?



>hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
ということなので、「カレントディレクトリからの相対パス」になります。

GetOpenFileName()とか使うと、場合によってはカレントディレクトリが変更されることもありますから…
「カレントディレクトリからの相対パス指定」でのファイルアクセスはオススメできませんね。

実行ファイル名を取得してパス名分解などを行った上で、絶対パス指定でファイルアクセスするべき…かと。
# 実行ファイル名を取得して…からならば、実行ファイルのある場所からの相対…のように絶対パス名を組み立てていけばいいわけですし。

LR_LOADFROMFILE指定ならば、AfxGetInstanceHandle()は不要かと思いますけどね。
# MFCの方で、LR_LOADFROMFILE指定かつインスタンスハンドルが指定されていたらモジュールのファイル名を取得して、そこからの相対パスでアクセスしてくれる。
# なんてのが実装されていたら意味があるかも知れませんけど……。
    • good
    • 0
この回答へのお礼

ご返事が遅れてしまい、申し訳ございません。
ご指摘等々ありがとうございました。

お礼日時:2012/07/08 11:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!