Windows8 プログラミング
久しぶりの更新となります。
今回はWindows8でタッチパネルを使ったデスクトップアプリケーションを作成する際のメモです。
とりあえず雑記となります。
タッチパネルとマウス
Windows8では既存のGUIアプリケーションをタッチパネルで扱えるように、OSによるタッチ→マウスの入力変換が行われています。
GetAsyncKey等のWindows APIとウィンドウメッセージで確認できます。
ウィンドウメッセージだと単にタッチするとマウスの左ボタン、1秒程度長押しすることで右ボタンとなります。
DirectInputは物理的なマウス入力の検出となるのでこちらではサポートされません。
タッチパネルとマウス その2
GetAsyncKeyの場合、単にタッチDown、タッチUpとマウスボタンのDown、Upが関連付けられる訳ではありません。
具体的には以下のような変換が行われます。
タッチ1回目Down:無し
タッチ1回目Up:WM_LBUTTONDOWN, WM_LBUTTONUP
タッチ2回目Down:WM_LBUTTONDOWN
タッチ2回目Up:WM_LBUTTONUP
スワイプの度にWM_LBUTTONDOWNが送られないように工夫されているようです。
がちょっとクセがありますね。
タッチにより送出されるウィンドウメッセージ
Windows8より新しくタッチ入力に関連するウィンドウメッセージが追加されています。
インストールできる人はWindows8 SDKの中のWindows.hの中見てください。
Spy++を放り込んで観察してみました。
メッセージと大体の解釈
MsgID | Description | wParam | lParam |
0x249 | Touch in | FingerID | スクリーン座標 |
0x246 | Touch began | FingerID | スクリーン座標 |
0x245 | Touch stationary/Moving | FingerID | スクリーン座標 |
0x247 | Touch end | FingerID | スクリーン座標 |
0x24A | Touch out | FingerID | スクリーン座標 |
タッチしている間、常に0x245が送出されます。
座標はマウス入力と同じくLOWORDとHIWORDに格納されています。