解決済みの質問
開発環境
XP Home Edtion
Microsoft Visual C++ 2008 Express Edition
SQL Server2005 Express Edtion
ボタンを押すと画像を画面に表示させるというものを作っています、実行時は白紙の状態で、ボタンを押すとその値の画像が表示されるというものです。
HDC hMdc;
HBITMAP hbmp = (HBITMAP)LoadImage( NULL, dstLPCSTR3, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION );
hMdc= CreateCompatibleDC(hdc );
SelectObject(hMdc, hbmp );
BitBlt(hdc, 0, 0, 2000, 5000, hMdc, 0, 0, SRCCOPY);
DeleteDC(hMdc);
DeleteObject(hbmp);
これはボタンを押されたときの処理です。
判りにくいところもあると思いますがどうかよろしくお願いいたします。
投稿日時 - 2009-01-08 13:57:24
0人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(5件中 1~5件目)
★アドバイス
・ボタン処理ルーチンに記述しているのなら画面更新しなくて正常です。
ボタン処理ルーチンで画面更新する場合は
(1)InvalidateRect関数を呼ぶ
(2)InvalidateRect関数とUpdateWindow関数を呼ぶ
一般にこのどちらかでしょう。
サンプル1:
ボタン処理()
{
HBITMAP hbmp = (HBITMAP)LoadImage( NULL, dstLPCSTR3, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION );
HDC hMdc = CreateCompatibleDC( hdc );
SelectObject( hMdc, hbmp );
BitBlt( hdc, 0, 0, 2000, 5000, hMdc, 0, 0, SRCCOPY );
DeleteDC( hMdc );
DeleteObject( hbmp );
InvalidateRect( hWnd, NULL, TRUE ); ←追加部分
}
サンプル2:
ボタン処理()
{
HBITMAP hbmp = (HBITMAP)LoadImage( NULL, dstLPCSTR3, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION );
HDC hMdc = CreateCompatibleDC( hdc );
SelectObject( hMdc, hbmp );
BitBlt( hdc, 0, 0, 2000, 5000, hMdc, 0, 0, SRCCOPY );
DeleteDC( hMdc );
DeleteObject( hbmp );
InvalidateRect( hWnd, NULL, TRUE ); ←追加部分
UpdateWindow( hWnd );
}
投稿日時 - 2009-01-08 18:45:30
お礼
返答遅れてすいません。
サンプル2でやっているのですが、画面更新は出来ているようなですが、画像のほうがちらっとしか出てきません。
投稿日時 - 2009-01-09 13:55:15
「何がわからないのか、何を聞きたいのか」が書かれていないので「わかりにくい」どころではなくさっぱりわかりません。
投稿日時 - 2009-01-08 14:01:37
お礼
申し訳ありません。
説明不足ですね。
ボタン内の処理が
HDC hMdc;
HBITMAP hbmp = (HBITMAP)LoadImage( NULL, dstLPCSTR3, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION );
hMdc= CreateCompatibleDC(hdc );
SelectObject(hMdc, hbmp );
BitBlt(hdc, 0, 0, 2000, 5000, hMdc, 0, 0, SRCCOPY);
DeleteDC(hMdc);
DeleteObject(hbmp);
なのですが、ボタン内の処理はこれだけが反映されないのです。
画面の更新?がなされていないのではと思いその方法はどのようなものが存在するのかを教えてもらいたいということです。
どうかお願いします。
投稿日時 - 2009-01-08 14:31:50
OKWaveのオススメ
おすすめリンク