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"
お礼
おっ!出来ましたよ。有難うございます。ちょっと感動。 バグなのでしょうか?他にもうまく動かないこととか あるみたいです.NET 2003には。