下のコードをビルドすると、
自分の意図としては、ウィンドウの左上に自機ビットマップが表示されてほしいのですが、
真っ黒な画面になってしまいます。
正確に言うと、背景が黒、自機ビットマップの画像が真っ黒、自機ビットマップの領域にあたる四角が白くなります。
症状に見当がつかないので、手を貸して頂きたいです。
よろしくお願いします。
ちなみに、wc.hdrBackgroundは(HBRUSH)(COLOR_WINDOW+1)となっています。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
static RECT sizeWnd;
static HDC hDC; PAINTSTRUCT ps;
static HDC hMemDC; static HBITMAP hMemBmp;
static HDC hMjDC; static HBITMAP hMjBmp; static BITMAP infoMjBmp;
static POINT posMj;
static int flagMjShot; static POINT posMjShot;
switch (message)
{
case WM_CREATE:
GetClientRect(hWnd, &sizeWnd);// クライアント領域の大きさをsizeWndに格納
// フロントバッファの初期処理
hDC = GetDC(hWnd);
// バックバッファの初期処理
hMemDC = CreateCompatibleDC(hDC);// hDCと互換性をとるメモリデバイスコンテキストhMemDCを構築
hMemBmp = CreateCompatibleBitmap(hMemDC, sizeWnd.right, sizeWnd.bottom);
// hMemDCと互換性のあるビットマップhMemBmpをsizeWndの大きさで生成
SelectObject(hMemDC, hMemBmp);
// 自機ビットマップの初期処理
hMjDC = CreateCompatibleDC(hMemDC);// hMemDCと互換性をとるメモリデバイスコンテキストhMjDCを構築
hMjBmp = (HBITMAP)LoadImage(// ビットマップイメージMYJET(リソース)をhMjBmpに設定
(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDB_MYJET), IMAGE_BITMAP,
0, 0, LR_DEFAULTCOLOR
);
SelectObject(hMjDC, hMjBmp);// hMjDCにhMjBmpを設定
GetObject(hMjBmp, sizeof(BITMAP), &infoMjBmp);// hMjBmpのビットマップ情報をBITMAP構造体infoMjBmpに格納
SetTimer(hWnd, 1, 10, NULL);// 100分の1秒毎にWM_TIMERメッセージを送るタイマー1をセット
break;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);// hDCにディスプレイのデバイスコンテキストのハンドルを格納
BitBlt(// hDCにバックバッファhMemDCを転送
hDC, 0, 0, sizeWnd.right, sizeWnd.bottom,
hMemDC, 0, 0, SRCCOPY
);
EndPaint(hWnd, &ps);
break;
case WM_TIMER:// 一定時間毎の処理
// 自機ビットマップをバックバッファhMemDCに描画
StretchBlt(// hMjDCを、posMjを左上の座標として縦横を3倍に引き伸ばしてhMemDCに転送
hMemDC, posMj.x, posMj.y, infoMjBmp.bmWidth * 3, infoMjBmp.bmHeight * 3,
hMjDC, 0, 0, infoMjBmp.bmWidth, infoMjBmp.bmHeight, SRCCOPY
);
InvalidateRect(hWnd, NULL, FALSE);
break;
No.1ベストアンサー
- 回答日時:
とりあえず…
作成されたばかりのデバイスコンテキストには、1x1ピクセルのモノクロビットマップが選択されています。
なので『hMemDCと互換性のあるビットマップhMemBmp』はモノクロになってしまうのです。
回答ありがとうございます。
確かに、ここがおかしいですね。
hMemBmp = CreateCompatibleBitmap(hMemDC, sizeWnd.right, sizeWnd.bottom);
正直言うと”互換性”の言葉の意味をよくわかってなかったので、
わからなかった理由としては、それが大きかったです。
自分の意図としては、上のhMemDCをhDCに換えたものが正しいのかなと思います。
あとクライアント領域の全体を白くするには、”領域と同じ大きさの白い長方形を描画する”で正しいのでしょうか?
何度も申し訳ないですが、お願いします。
No.2
- 回答日時:
> あとクライアント領域の全体を白くするには、”領域と同じ大きさの白い長方形を描画する”で正しいのでしょうか?
ウィンドウのクライアント領域を塗るという意味であれば正しくありません。
hMemBmpで示されるビットマップでクライアント領域全体が埋まるので、クライアント領域を消去しても意味がありません。
塗り潰すべき背景はhMemBmpで示されるビットマップにあります。
”領域と同じ大きさの白い長方形を描画する”のはhMemBmpで示されるビットマップに対して、になります。
#wc.hdrBackgroundはNULLにしておくと無駄な処理が減ります。
#むしろNULLでないとウィンドウ操作時に激しく点滅することがあります。
回答ありがとうございます。
自分の言葉足らずな部分があったようで恐縮します。
>#wc.hdrBackgroundはNULLにしておくと無駄な処理が減ります。
思いも寄らない情報で、助かりました。
早速変えておこうと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# int tff(int clk) { static int state = 0; //状態 stat 1 2022/07/11 21:14
- 飛行機・空港 ミルウォーキーツールHDC大阪から伊丹空港へ乗り換え無しで行く方法はありますか? できれば、空港直通 2 2023/05/12 06:44
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- その他(メールソフト・メールサービス) メールソフトを教えてください 1 2023/03/28 23:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コントロール内の文字の背景色
-
VBでFD、USBの有効・無効...
-
SetWindowRgn()関数について。
-
Win32APIにて、アイコンの情報...
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
グラフの交点の求め方(Excel)
-
フォントの大きさ
-
VBAのフォント変更(エクセルか...
-
メッセージボックスの選択ボタ...
-
コントロールの書式設定で、“コ...
-
メッセージボックスを大きくす...
-
検索の画面がでなくなってしま...
-
コンボボックス内の文字サイズ変更
-
フォームでPDFを表示させた...
-
Excelの上下を固定したい
-
他のウィンドウのボタンを自動...
-
閉図形の座標の配列が右回りか...
-
ダイアログ内コントロールの位...
-
ゲームでは結局どっちが良いの?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンテキスト依存とは?
-
ダイアログにビットマップを貼...
-
GetDC()とCreateCompatibleDC()
-
画面がチカチカする
-
C 多角形を半透明に塗る方法
-
ピクチャーコントロールのデバ...
-
Rectangleで、リソースが解放さ...
-
画像処理 ビットマップ ダブ...
-
ウインドウ内全体を一定時間で...
-
TextOutについて
-
VBでFD、USBの有効・無効...
-
メモリデバイスコンテキスト&...
-
ハードコピーをプログラムから...
-
VC++のTextOutの再描画の仕方
-
PrintScreenしたあとに画像を保...
-
SelectObjectについて
-
ダブルバッファの作り方
-
VC++でBitmapとText文字を表示...
-
Windowsプログラミング 画面描...
-
GetPixelに使うHDCの作り方
おすすめ情報