- 追加された行はこの色です。
- 削除された行はこの色です。
今回はキー入力を取得してみます
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])