プロが教える店舗&オフィスのセキュリティ対策術

小生、只今Win32APIとC言語を使い、WindowsXPSP3上でBCC5.5.1とBCCFormを使いビットマップを表示するプログラムを書いていますが、
"猫でもわかるWindows~"などに掲載されているサンプルを実行してみますが、ビットマップが表示されません。

ウィンドウクラスの登録、ウィンドウの生成などはほぼ、
http://gurigumi.s349.xrea.com/programming/visual …
に掲載されている、サンプルプログラムと同じです。
違いと言うと、ResBitmap.hをインクルードしているくらいです。

問題はウィンドウプロシージャにあって、
下記にウィンドウプロシージャ、WndProc関数を記します。
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
HDC hdc, hdc_mem;
PAINTSTRUCT ps;
HBITMAP hBmp;
BITMAP bmp_info;
static int w, h;

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

hBmp = LoadBitmap(hInst, "MYBMP");
if(hBmp == NULL){
MessageBox(hWnd, "ビットマップ読み込み失敗", NULL, MB_OK);
return 0;
}

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);

DeleteDC(hdc_mem);
DeleteObject(hBmp);

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

return DefWindowProc(hWnd, msg, wp, lp);
}
この状態で実行ファイルを、
bcc32 -W source.cpp
brc32 Bitmap.rc source.exe
とし、出来上がったsource.exeを実行すると"ビットマップ読み込み失敗"のメッセージボックスが表示されてしまい、ウィンドウには何も表示されません。

ちなみに、Bitmap.rcは下記の様になってます。
MYBMPBITMAPDISCARDABLE"C:\Documents and Settings\ShuNakagawa\My Documents\C\test.bmp"

ResBitmap.hは下記の様になってます。
#defineMYBMP100

以上です。
諸先輩方、アドバイス宜しくお願い致します。
もう悩んで2ヶ月程経ちます、どうか本当に助けてください。
※LoadBitmapの第2引数をMAKEINTRESOURCE(MYBMP)とし、
 実行ファイルを作成しましたが、結果は同じでした。。。

A 回答 (1件)

Bitmap.rcにはResBitmap.hをインクルードしていますか?


インクルードしている場合はMAKEINTRESOURCE(MYBMP)になるハズ……ですけど。

>"ビットマップ読み込み失敗"のメッセージボックスが表示されてしまい

GetLastError()ではなんと言っています?
hInstが不正ということはありませんか?
LoadImage()の場合はどうですか?

この回答への補足

早速のご回答頂き、誠に感謝申し上げます。

以下、Wr5さんの引用が多くなります、申し訳ございません。

>Bitmap.rcにはResBitmap.hをインクルードしていますか?
はい。
インクルードしています。
インクルードした状態でMAKEINTRESOURCE(MYBMP)も試しました。。。
が、ビットマップは表示されませんでした。

>GetLastError()ではなんと言っています?
>hInstが不正ということはありませんか?
すいません。
GetLastError()を使って、エラーを見ようと思ったのですが、
GetLastError()の使い方がよくわかりません、すいません。。。

>LoadImage()の場合はどうですか?
LoadImage()でファイル名を直に指定した場合はうまく表示されたのですが、どうしても、リソースからなぜ読み込まれないのかを知りたいです。

以上、乱文ですが、ご確認の程宜しくお願いします。

補足日時:2010/01/02 02:18
    • good
    • 0
この回答へのお礼

Wr5さんありがとうございます!!!!!
hInstにインスタンスを格納し忘れていました。。。
GetWindowLong()でウィンドウ情報を格納すると、
見事、リソースからビットマップを読み込む事が出来ました!!!!

貴重なヒントを頂き誠に感謝申し上げます!
次回からはキチンとソースを全体的に眺めて、質問の方できるだけしないようにがんばりたいと思います。

本当にありがとうございました!

お礼日時:2010/01/02 02:49

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