''[[FrontPage]]''
* キーボードイベントを扱う [#b4997401]
キーボードイベントを受けるマクロにWM_KEYDOWNとWM_CHARがある。~
ウィンドウプロシージャでイベントを受け、WPARAMの値からキーコードまたは文字を取り出すことができる。~

** 制約 [#p1aef515]
.NET関数・MFCを使用しないこと。~

*** コメント [#z9e0080d]
ウィンドウがアクティブな状態で何かキーを押すと、メッセージボックスからキーコードと文字を確認できます。~
2つのマクロの動きの違いを味わってください。(あなたの環境でもWM_CHARが先に判定されますか?)~
~
メイン部分の記述はしませんが、適当なプロシージャのswitch文に追加してもらえればすぐにテストできると思います。~
UNICODEを意識したtstringについては、[[C++入門/Unicodeに対応する]] を参照。

 LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp ) //                                          //
 {                                                               //                                                //
     switch( msg )                                               // メッセージを判定                               //
     {                                                           //                                                //
     case WM_COMMAND:                                            // コマンドを拾う場合                             //
         switch( LOWORD( wp ) )                                  // コマンドの種別によって分岐処理                 //
         {                                                       //                                                //
         case WM_KEYDOWN:                                        // WM_KEYDOWNを拾う場合の動作                     //
         {                                                       //                                                //
             if(19 == wp)                                        // pauseキー(コード19)かを判定(例外キーテスト)    //
             {                                                   // pauseキーが押された場合                        //
                 PostQuitMessage( END_MSG );                     // 全終了                                         //
             }                                                   //                                                //
                                                                 //                                                //
             tstring numMsg( _T("押されたキーのコードは 【") );  // メッセージ表示用                               //
             TCHAR *codeNum;                                     // 整数を文字列に変換するため                     //
                                                                 //                                                //
             codeNum = new TCHAR[4];                             // メモリ割当て                                   //
             memset( codeNum, '\0', sizeof(codeNum) );           // 割当てられた領域の初期化                       //
                                                                 //                                                //
             _itot( (int)wp, codeNum, 10 );                      // 10進整数を文字列に変換する                   //
                                                                 //                                                //
             numMsg.append( (TCHAR*)codeNum );                   // メッセージ編集 文字コード(仮想コード)          //
             numMsg.append( _T("】 です。\n") );                 // メッセージ編集                                 //
                                                                 //                                                //
             numMsg.append( _T("文字は 【") );                   // メッセージ編集                                 //
             numMsg.append( (PTSTR)&wp );                        // メッセージ編集 キーの判定                      //
             numMsg.append( _T("】 です。") );                   // メッセージ編集                                 //
                                                                 //                                                //
             delete [] codeNum;                                  // 割当てられた領域の解放                         //
                                                                 //                                                //
             MessageBox( NULL, numMsg.c_str(), _T("StyleMod"), MB_OK ); // 画面表示                                //
                                                                 //                                                //
             return PROCESS_OK;                                  // 処理終了                                       //
         }                                                       //                                                //
                                                                 //                                                //
         case WM_CHAR:                                           // WM_CHARを拾う場合の動作                        //
         {                                                       //                                                //
             tstring numMsg( _T("押されたキーのコードは 【") );  // メッセージ表示用                               //
             TCHAR *codeNum;                                     // 整数を文字列に変換するため                     //
                                                                 //                                                //
             codeNum = new TCHAR[4];                             // メモリ割当て                                   //
             memset( codeNum, '\0', sizeof(codeNum) );           // 割当てられた領域の初期化                       //
                                                                 //                                                //
             _itot(                                              // 10進整数を文字列に変換する                   //
                 (int)wp,                                        //                                                //
                 codeNum,                                        //                                                //
                 10 );                                           //                                                //
                                                                 //                                                //
             numMsg.append( (TCHAR*)codeNum );                   // メッセージ編集 文字コード(WM_CHAR)             //
             numMsg.append( _T("】 です。\n") );                 // メッセージ編集                                 //
                                                                 //                                                //
             numMsg.append( _T("文字は 【") );                   // メッセージ編集                                 //
             numMsg.append( (PTSTR)&wp );                        // メッセージ編集 文字の判定                      //
             numMsg.append( _T("】 です。") );                   // メッセージ編集                                 //
                                                                 //                                                //
             delete [] codeNum;                                  // 割当てられた領域の解放                         //
                                                                 //                                                //
             MessageBox( NULL, numMsg.c_str(), _T("StyleMod"), MB_OK ); // 画面表示                                //
                                                                 //                                                //
             return PROCESS_OK;                                  // 処理終了                                       //
         }                                                       //                                                //
                                                                 //                                                //
     case WM_DESTROY:                                            // ウィンドウ破棄のとき                           //
         PostQuitMessage( END_MSG );                             // 終了メッセージを送る                           //
         return PROCESS_OK;                                      // 正常終了                                       //
     }                                                           //                                                //
                                                                 //                                                //
     return DefWindowProc( hWnd, msg, wp, lp );                  // 他のメッセージは、デフォルトの処理を行う       //
                                                                 //                                                //
 }
*** 参考ページ [#xb0c11fb]
http://wisdom.sakura.ne.jp/system/winapi/win32/win30.html~
http://wisdom.sakura.ne.jp/system/winapi/win32/win31.html~

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS