1つ教えていただきたい事があります。
以下のプログラムはクライアント領域のみのウィンドウを生成し、
「クライアント領域にファイルから読み込んだ画像を10秒間表示」
を繰り返すものです。
ウィンドウ上でクリックするとプログラムが終了するようにしています。
質問内容:今の状況はクリックをすると10秒間の表示を待ってから終了する
ようになっていますが、10秒間待たなくても即座に終了するようにしたいと
考えています。 どのような方法をとったらよいか教えていただけないでしょうか。
#include<windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
void PicBaseFileName (HWND); //ファイル名を設定
void PicBaseFileLoad (HWND, LPCSTR fname); //ファイルを読み込み
//メイン------------------------------------------------------
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR lpCmdLine, int nCmdShow) {
//■ウインドウの設定
HWND hwnd, hwndBase;
MSG msg;
WNDCLASS winc;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
winc.hCursor = LoadCursor (NULL, IDC_ARROW);
winc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = "FormMain";
if (!RegisterClass (&winc)) return 0;
hwnd = CreateWindow ("FormMain", NULL, WS_POPUP, 0, 0,
500, 200, NULL, NULL, hInstance, NULL);
ShowWindow (hwnd, SW_SHOW);
//■マウスの非表示
ShowCursor (0);
//■画像ファイルの読込
PicBaseFileName (hwndBase);
//■ウィンドウ上でクリックされたら終了処理
while (GetMessage (&msg, NULL, 0, 0)) {
TranslateMessage (&msg);DispatchMessage (&msg);
}
return 0;
}
//マウスによる終了処理-----------------------------------------
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg,
WPARAM wp, LPARAM lp) {
switch (msg) { PostQuitMessage (0); }
return 0;
case WM_LBUTTONDOWN:
PostQuitMessage (0);
return 0; //■左クリックで終了
return DefWindowProc (hwnd, msg, wp, lp); }
//ファイルから画像読込&表示-----------------------------------
void PicBaseFileLoad (HWND hwndBase, LPCSTR fname) {
//■宣言 HDC
HBITMAP hbitmap1, hbitmap2;
HDC hdc Base1, hdcBuff1;
BITMAP bmData;
//■画像読込
//-----------ファイルから読込
hdcBase1 = GetDC (hwndBase); //クライアント領域DC作成取得
hbitmap1 = (HBITMAP) LoadImage (0, fname, IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_LOADFROMFILE);
hdcBuff1 = CreateCompatibleDC (hdcBase1);//メモリDC作成
SelectObject (hdcBuff1, hbitmap1); //メモリDCとBMP 関連づけ
BitBlt (hdcBase1, 0, 0, x2, y2, hdcBuff1, 0, 0, SRCCOPY);
Sleep(1000);
//-----------メモリの解放
DeleteDC (hdcBuff1);
DeleteObject (hbitmap1);
ReleaseDC (hwndBase, hdcBase1);
}
//画像ファイル名取得--------------------------------------------
void PicBaseFileName (HWND hwndBase) {
PicBaseFileLoad (hwndBase, "temp1.bmp");
PicBaseFileLoad (hwndBase, "temp2.bmp");
}
上記のプログラムの訂正
hwndBase1 → hwnd
Sleep (1000) → Sleep (10000)
宣言部分の BITMAP と HBITMAP hdcbitmap2 は削除。
何度も見直したつもりでしたが、すいません。
よろしくお願いいたします。
SetTimerを使うとよいと思います。
なるほど SetTimer調べて試したところ うまくいくようになりました。
どうもありがとうございました。 ^^
解決のチェック入れます。^^;
ツイート | ![]() |