sample\new\multitouch1.hsp » Plain Format
;
; Windows7のマルチタッチ入力を取得するサンプルです。
; マルチタッチに対応したデバイスでのみ実行できます。
#uselib "user32.dll"
#cfunc GetSystemMetrics "GetSystemMetrics" int
#func GetGestureInfo "GetGestureInfo" int,int
#func ScreenToClient "ScreenToClient" int,int
#define NID_MULTI_INPUT 0x40 ; マルチタッチ可能フラグ
#define NID_READY 0x80 ; タッチ入力可能フラグ
#define WM_GESTURE 0x0119
#define WM_TOUCH 0x0240
#define SM_DIGITIZER 94
#define SM_MAXIMUMTOUCHES 95
#enum G_SIZE=0
#enum G_FLAGS
#enum G_ID
#enum G_TARGET
#enum G_POSXY
#enum G_INST
#enum G_SEQ
#enum G_PAD
#enum G_ARGL
#enum G_ARGH
#enum G_EXT
title "ジェスチャー入力テスト"
size_ginput=12
dim ginput,size_ginput ; GESTUREINFO構造体のバッファ
dim posxy,4
ginput(G_SIZE)=size_ginput*4
sdim idstr,64,8
idstr(1)="GID_BEGIN"
idstr(2)="GID_END"
idstr(3)="GID_ZOOM"
idstr(4)="GID_PAN"
idstr(5)="GID_ROTATE"
idstr(6)="GID_TWOFINGERTAP"
idstr(7)="GID_PRESSANDTAP"
sysm=GetSystemMetrics(SM_DIGITIZER)
i=NID_MULTI_INPUT|NID_READY
if (sysm&i)!=i {
dialog "マルチタッチに対応していません。" : end
}
onexit *bye
oncmd gosub *OnGesture, WM_GESTURE ; メッセージ割り込み
stop
*bye
end
*OnGesture
; ジェスチャー割り込み
GetGestureInfo lparam, varptr(ginput)
if stat {
posxy(0)=ginput(G_POSXY)&0xffff
posxy(1)=ginput(G_POSXY)>>16
ScreenToClient hwnd,varptr(posxy)
mes strf( "%s:%x:%x:%d,%d",idstr( ginput(G_ID) ), ginput(G_ARGL), ginput(G_ARGH), posxy(0), posxy(1) )
}
return