F12 & ESC キーでプログラムを終了する



VC++ の WM_KEYDOWN: で F12 と ESC キーを検出してプログラムを終了します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明です。

  1. 新規プロジェクト(Esc)を作成して CALLBACK WndProc() を表示して下さい。
    キーが押されると WM_KEYDOWN: がポストされてきます。
    wParam を調べて VK_ESCAPE(ESC) か VK_F12(F12) が検出されると WM_CLOSE をポストして終了します。
    自分で処理したときは FALSE(0L) で終了します。
        switch( message )
        {
            case WM_KEYDOWN:
                switch(wParam)
                {   case VK_ESCAPE:
                    case VK_F12:
                        PostMessage(hWnd,WM_CLOSE,0,0);
                        return 0L;
                }
                break;
        
  2. ついでにカーソルを非表示に設定してみました。
    アプリケーションによってはカーソルが邪魔になることがあります。
    カーソルは表示されませんが、WM_MOUSEMOVE: は効いているようです。
            case WM_SETCURSOR:
                SetCursor(NULL);
                return 0L;
        
  3. [デバッグ][デバッグなしで開始]を選択して、ビルドに続いて実行を行います。
    F12 または ESC キーをタイプするとプログラムが終了することを確認して下さい。

【演習】

  1. 上下左右の矢印キーをカウントして、押された数を表示して下さい。
  2. キーを押し続けるとリピート機能が働いて連続してキーがポストされてくることを確認して下さい。
  3. プログラムを終了する時に MessageBox で確認して下さい。

【メモ】

WindowsXP(Visual C++ .NET) で「ビルド&実行」のとき VK_F12: キーをタイプするとエラーが発生する現象が起こっています。
*.exe をダブルクリックで起動したときは VK_F12: キーで正常に終了するので試して下さい。
Visual C++ の何かの機能に VK_F12: キーが割り当てられているのでしょうか?。

【NOTE】

元の矢印カーソルに戻すソースコードです。
SetCursor(LoadCursor(NULL,IDC_ARROW));

代表的なキー定義の名前です。
キーの名称は Winuser.h で定義されています。
定義名 キー
VK_ESCAPE ESC KEY
VK_SPACE SPACE KEY
VK_NUMPAD1 NUM KEY 1
VK_UP ↑ KEY
VK_DOWN ↓ KEY
VK_LEFT ← KEY
VK_RIGHT → KEY
VK_F12 F12 KEY
'a' 小文字 'a' KEY
'Z' 大文字 'Z' KEY

超初心者のプログラム入門(Win32API C++)