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に格納されています。