小生、只今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)とし、
実行ファイルを作成しましたが、結果は同じでした。。。
No.1ベストアンサー
- 回答日時:
Bitmap.rcにはResBitmap.hをインクルードしていますか?
インクルードしている場合はMAKEINTRESOURCE(MYBMP)になるハズ……ですけど。
>"ビットマップ読み込み失敗"のメッセージボックスが表示されてしまい
GetLastError()ではなんと言っています?
hInstが不正ということはありませんか?
LoadImage()の場合はどうですか?
この回答への補足
早速のご回答頂き、誠に感謝申し上げます。
以下、Wr5さんの引用が多くなります、申し訳ございません。
>Bitmap.rcにはResBitmap.hをインクルードしていますか?
はい。
インクルードしています。
インクルードした状態でMAKEINTRESOURCE(MYBMP)も試しました。。。
が、ビットマップは表示されませんでした。
>GetLastError()ではなんと言っています?
>hInstが不正ということはありませんか?
すいません。
GetLastError()を使って、エラーを見ようと思ったのですが、
GetLastError()の使い方がよくわかりません、すいません。。。
>LoadImage()の場合はどうですか?
LoadImage()でファイル名を直に指定した場合はうまく表示されたのですが、どうしても、リソースからなぜ読み込まれないのかを知りたいです。
以上、乱文ですが、ご確認の程宜しくお願いします。
Wr5さんありがとうございます!!!!!
hInstにインスタンスを格納し忘れていました。。。
GetWindowLong()でウィンドウ情報を格納すると、
見事、リソースからビットマップを読み込む事が出来ました!!!!
貴重なヒントを頂き誠に感謝申し上げます!
次回からはキチンとソースを全体的に眺めて、質問の方できるだけしないようにがんばりたいと思います。
本当にありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- 飛行機・空港 ミルウォーキーツールHDC大阪から伊丹空港へ乗り換え無しで行く方法はありますか? できれば、空港直通 2 2023/05/12 06:44
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++のcase文の書き方
-
オーバーレイみたいな処理がしたい
-
プログラミングでエラーが出ま...
-
C言語win32api、エディットボッ...
-
音量調節
-
画像を表示したいのですが……
-
ボタンの色(WINAPI)
-
コンソールアプリケーションの...
-
Win32APIでウィンドウを中央に...
-
マイナスからプラスへ転じた時...
-
Enterキーを押されたら次の処理...
-
C言語での引数の省略方法
-
プログラムでの数字につく”f”の...
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
2÷3などの余りについて
-
10個出力で改行したいのですが...
-
doubleの変数にintとintの割り...
-
#define _CRT_SECURE_NO_WARNIN...
-
Excelで1つしかない値だけを抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Win32APIでウィンドウを中央に...
-
オーバーレイみたいな処理がしたい
-
ダイアログプログラムでEnterキ...
-
キャレットの現在位置の表示 (W...
-
PeekMessageについて
-
ウィンドウ非表示に時に表示し...
-
C#のswitch文を簡略化したいの...
-
C言語win32api、エディットボッ...
-
音量調節
-
LoadImageを使用し、タイトルバ...
-
プログラミングでエラーが出ま...
-
エディットコントロール入力時...
-
ウィンドウハンドルがメッセー...
-
ボタンの色(WINAPI)
-
画像を表示したいのですが……
-
WINAPIでキーから文字列を入力...
-
エラー Run-Time Check Failur...
-
エディットボックスの背景の色...
-
Win32APIでアイコンファイルを...
-
WM_KEYDOWNでPrtScを捕まえる方...
おすすめ情報