WM_KEYDOWNはキーが押されている間キューにメッセージが送られます。
この時仮想キーのメッセージが wParam に入っているので、
それに対応する仮想キーコードを使って処理を行ったりします。
(仮想キーコードの定義は winuser.h に書かれています)
以下に一例を書いてみます。
case WM_KEYDOWN: if(wParam==VK_ESC){ SendMessage (hwnd, WM_CLOSE, 0, 0); return 0 ; } //if ……
ESCキーが押されると終了メッセージを送ります。
ただし、PocketPCの場合、SIPボタンのキーは
タップが離された後にWM_KEYDOWNが起こるので
あまりアクティブな操作には向いていませんね。
WM_KEYUPは、キーが離されるとキューにメッセージが送られます。
また、PocketPCには一般的に十字カーソルキーと4つのボタンがありますが、
アクションボタン以外の3つのボタンはWM_KEYDOWNでは取得できませんでした。
どう取得すればよいのやら・・・とことんゲームに不向きなようです。
(筆者の力不足なだけで、やり方はあるのかもしれませんが)
WM_CHARは、仮想キーメッセージをTranslateMessage関数に通したとき
キューに文字メッセージがポストされます。
つまりWM_KEYDOWNが呼ばれた後にWM_CHARが呼ばれるわけですね。
'9'、'A'といった文字メッセージが wParam に入っているので
それを処理します。以下に分岐処理の一例を書きます。
case WM_CHAR: switch ((char)wParam){ case '1': SendMessage (hwnd, WM_CLOSE, 0, 0); return 0; } //switch ……
'1'キーが押されると終了メッセージを送ります。
PocketPCのSIPボタンを押した場合、離された時点でやっと
WM_KEYDOWN→WM_CHAR→WM_KEYUPと
順に呼ばれることになります。
2005/5/20