みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Bitmap表示について WIN32

「猫でもわかるwindowsプログラミング 第4版」を参考にして、ビットマップを表示するプログラムを作っています。

開発環境はVisual Studio Express 2015(Visual C++)です。

読み込んだビットマップを表示させようと、下記のように(本の内容をそっくりそのまま)コードとリソースを書いてみたのですがデバッグすると何も表示されないウィンドウが出てしまいます。


メッセージボックスで確かめてみると、
ビットマップリソースを読み込んだ際、hBmpにNULLが返っていました。

コードもリソースも本の通りに書いたので間違いはないと思います。
となると、うまくいかない理由はリソースとビットマップをプロジェクトに追加させるまでの過程にあると考えます。
本で扱っている環境はVisual c++ 2010 だったのですが、リソースの追加に関してバージョンの差が関係しているのでしょうか?

リソースの追加に関してはネットや本にたくさん説明がありますが、それらの通り書いてもうまくいきません。

どうか、リソースのプロジェクトへの追加方法を教えていただけないでしょうか。
また、ソースコード・リソースに関して間違いがあるのならばアドバイスもらえるとありがたいです。





// ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
HDC hdc, hdc_mem;
PAINTSTRUCT ps;
HBITMAP hBmp;
BITMAP bmp_info;
int w, h;

switch (msg) {
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);

// ビットマップリソース「MYBMP」を読み込む
hBmp = LoadBitmap(hInst, TEXT("MYBMP"));

// ビットマップの情報を取得し、幅と高さを変数に保管
GetObject(hBmp, (int)sizeof(BITMAP), &bmp_info);
w = bmp_info.bmWidth;
h = bmp_info.bmHeight;

// メモリデバイスコンテキストを作成
hdc_mem = CreateCompatibleDC(hdc);

// メモリデバイスコンテキストにビットマップを選択
SelectObject(hdc_mem, hBmp);

// ビットマップを転送
BitBlt(hdc, 0, 0, w, h, hdc_mem, 0, 0, SRCCOPY);
StretchBlt(hdc, w, 0, w * 2, h * 2,
hdc_mem, 0, 0, w, h, SRCCOPY);

DeleteDC(hdc_mem); // メモリデバイスコンテキストを破棄
DeleteObject(hBmp); // ビットマップオブジェクトを破棄

EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, msg, wp, lp));
}
return 0;
}



//リソース
MYBMP BITMAP "bitmap1.bmp"

投稿日時 - 2016-02-04 21:11:23

QNo.9122439

困ってます

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

.Net 2003の場合の確認方法のようですが、
2005でも同様に確認できないでしょうか?

参考URLページ最下部に確認方法がまとめられております。
>【BMP のインポートが出来ない】

参考URL:http://www.eonet.ne.jp/~maeda/winc/bmpview.htm

投稿日時 - 2016-02-05 18:15:30

お礼

回答ありがとうございます!
表示することができました。

投稿日時 - 2016-02-05 20:42:14

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問