今回はキー入力を取得してみます OnChar関数を作成し、メッセージクラッカーに渡します 戻り値、引数は次の通りです /* void Cls_OnChar(HWND hwnd, TCHAR ch, int cRepeat) */ #define HANDLE_WM_CHAR(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L) 注目して欲しいのはwParamとlParamの扱いです wParamはTCHAR型に、lParamの下位バイトはint型にキャストされています LOWORDは #define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xffff)) で定義されているマクロで下位バイトを示します このように、wParamとlParamの取扱いはメッセージごとに違います WM_DESTROYでは使用しませんでした メッセージクラッカーの定義に従えば、パラメータの適切な使い方がわかります ちなみにここでは使いませんが 上位バイトを示すにはHIWORDというマクロを使います #define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16)) ------------------------------------------------------ ではキー入力メッセージ処理部分を書いてみましょう どのキーが押されたかというメッセージは WM_CHARメッセージが送られてきます //-------------------------------------------------------// // キー文字メッセージ処理 // // 引数: hWnd ウィンドウハンドル // ch 入力された文字 // cRepeat リピートカウント(長押し時、キー処理を行う回数) //-------------------------------------------------------// void OnChar(HWND hWnd, TCHAR ch, int cRepeat){ _tprintf(_T("%c"),ch); } //------------------------------------------------------// // ウィンドウ破棄メッセージ処理 // // 引数: hWnd ウィンドウハンドル //------------------------------------------------------// void OnDestroy(HWND hWnd){ PostQuitMessage(0); } //-----------------------------------------------------// // ウィンドウプロシージャ // デフォルトの処理はDefWindowProc関数で行う // // 引数: hWnd ウィンドウハンドル // msg メッセージ // wParam パラメータ // lParam パラメータ // // 戻り値:処理結果 //-----------------------------------------------------// LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ switch(msg){ // キーボード HANDLE_MSG(hWnd,WM_CHAR,OnChar); HANDLE_MSG(hWnd,WM_DESTROY,OnDestroy); } return DefWindowProc(hWnd, msg, wParam, lParam); } デバックコンソールを表示しておいてください _tprintf関数は通常のprintf関数とUnicode文字出力用のwprintf関数を切り替えるマクロです TCHAR型は文字コード定義によってchar型とwchar_t型が切り替わる文字です 文字に関しては全てTCHAR型で取り扱えば、文字コードの問題は回避できます ウィンドウにフォーカス状態でキーを打てば入力できます &ref(key.GIF); 全ソースコードは下から &ref(main.cpp); #vote((^ω^)やったお[0],何これwww意味不すぎwww[0],。(`ω´#)。あぁん?最近、だらしねぇな[0]) |(^ω^)やったお|0| |何これwww意味不すぎwww|0| |。(`ω´#)。あぁん?最近、だらしねぇな|0|