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