アプリケーションの終了方法について

解決


桃栗3年  2005-07-01 04:23:37  No: 58122

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


桃栗3年  2005-07-01 04:37:30  No: 58123

上記のプログラムの訂正
hwndBase1  →  hwnd
Sleep  (1000)  →  Sleep (10000)
宣言部分の  BITMAP と  HBITMAP hdcbitmap2  は削除。
何度も見直したつもりでしたが、すいません。

よろしくお願いいたします。


dairygoods  2005-07-01 04:50:43  No: 58124

SetTimerを使うとよいと思います。


桃栗3年  2005-07-01 15:07:33  No: 58125

なるほど  SetTimer調べて試したところ  うまくいくようになりました。
どうもありがとうございました。  ^^


桃栗3年  2005-07-01 15:08:32  No: 58126

解決のチェック入れます。^^;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加