當然要有硬體與作業系統及 SDK:
A multi-touch monitor
A PC or NB installed Windows 7
Installed Windows 7 SDK
Visual Studio(我用的是 Visual Studio 2008)
環境設定
設定Win7 SDK的路徑, 包含include與library都要設定:
Header :Declared in Winuser.h; include Windows.h.
Library:Include User32.lib
接下來請參考前一篇的資料結構,因為微軟的開發模式都差不多,在寫 Multitouch 與寫 Mouse 的方式很像,就是收 Message, 定義自己得 event handler, 底下就列出相關的 Message:
WM_GESTURE Message
Passes information about a gesture.
Parameters
wParam
Provides information identifying the gesture command and gesture-specific argument values. This information is retrieved by calling GetGestureInfo.
lParam
Provides information identifying the gesture command and gesture-specific argument values. This information is retrieved by calling GetGestureInfo.
Return Value
If an application processes this message, it should return 0.
If the application does not process the message, it must call DefWindowProc. Not doing so will cause the application to leak memory because the touch input handle will not be closed and associated process memory will not be freed.
WM_GESTURENOTIFY Message
Indicates that a gesture message is about to be received.
Parameters
wParam
Unused.
lParam
A pointer to a GESTURENOTIFYSTRUCT.
Return Value
If an application processes this message, it should return 0.
Remarks
When the WM_GESTURENOTIFY message is received, the application can use SetGestureConfig to specify the gestures to receive.
Examples
switch (message)
{
case WM_GESTURENOTIFY:
{
GESTURECONFIG gc = {0,GC_ALLGESTURES,0};
BOOL bResult = SetGestureConfig(hWnd,0,1,&gc,sizeof(GESTURECONFIG));
if(!bResult)
{
// an error
}
}
break
GESTUREINFO Structure
Stores information about a gesture.
Syntax
typedef struct _GESTUREINFO {
UINT cbSize;
DWORD dwFlags;
DWORD dwID;
HWND hwndTarget;
POINTS ptsLocation;
DWORD dwInstanceID;
DWORD dwSequenceID;
ULONGLONG ullArguments;
UINT cbExtraArgs;
} GESTUREINFO, *PGESTUREINFO;
Members
cbSize
The size of the structure, in bytes. The caller must set this to sizeof(GESTUREINFO).
dwFlags
The state of the gesture. For additional information, see Remarks.
dwID
The identifier of the gesture command.
hwndTarget
A handle to the window that is targeted by this gesture.
ptsLocation
A POINTS structure containing the coordinates associated with the gesture. These coordinates are always relative to the origin of the screen.
dwInstanceID
An internally used identifier for the structure.
dwSequenceID
An internally used identifier for the sequence.
ullArguments
An unsigned long long that contains the arguments for gestures that fit into 8 bytes.
cbExtraArgs
The size, in bytes, of extra arguments that accompany this gesture.
Remarks
The GESTUREINFO structure is retrieved by passing the handle to the gesture information structure to the GetGestureInfo function.
The following flags indicate the various states of the gestures and are stored in dwFlags.
Name Value Description
GF_BEGIN 0x00000001 Indicates a gesture is starting
GF_INERTIA 0x00000002 Indicates a gesture has triggered inertia
GF_END 0x00000004 Indicates a gesture has finished
Note Most applications should ignore the GID_BEGIN and GID_END messages and pass them to DefWindowProc. These messages are used by the default gesture handler and application behaviour is undefined when the GID_BEGIN and GID_END messages are consumed by a third party application.
The following table indicates the various identifiers for gestures.
Name Value Description
GID_BEGIN 1 Indicates a gesture is starting.
GID_END 2 Indicates a gesture is ending.
GID_ZOOM 3 Indicates the zoom gesture.
GID_PAN 4 Indicates the pan gesture.
GID_ROTATE 5 Indicates the rotation gesture.
GID_TWOFINGERTAP 6 Indicates the two-finger tap gesture.
GID_ROLLOVER 7 Indicates the rollover gesture.
Examples
GESTUREINFO gestureInfo = {0};
gestureInfo.cbSize = sizeof(gestureInfo);
BOOL bResult = GetGestureInfo((HGESTUREINFO)lParam, &gestureInfo);
dwCommand dwArguments ptsLocation
Pan Distance between contacts Current center of gesture
Zoom Distance between contacts Current center of gesture
Rotate Absolute angle on rotate start, delta on updates Current center of gesture
Two-finger tap NA Current center of gesture
GESTURENOTIFYSTRUCT Structure
When transmitted with WM_GESTURENOTIFY messages, passes information about a gesture.
Syntax
typedef struct tagGESTURENOTIFYSTRUCT {
UINT cbSize;
DWORD dwFlags;
HWND hwndTarget;
POINTS ptsLocation;
DWORD dwInstanceID;
} GESTURENOTIFYSTRUCT, *PGESTURENOTIFYSTRUCT;
Members
cbSize
The size of the structure.
dwFlags
Reserved for future use.
hwndTarget
The target window for the gesture notification.
ptsLocation
The location of the gesture.
dwInstanceID
A specific gesture instance with gesture messages starting with GID_START and ending with GID_END.
GESTURECONFIG Structure
Gets and sets the configuration for enabling gesture messages and the type of this configuration.
Syntax
typedef struct _GESTURECONFIG {
DWORD dwID;
DWORD dwWant;
DWORD dwBlock;
} GESTURECONFIG, *PGESTURECONFIG;
Members
dwID
The identifier for the type of configuration that will have messages enabled or disabled. For more information, see Remarks.
dwWant
The messages to enable.
dwBlock
The messages to disable.
Remarks
When you pass this structure, the dwID member contains information for a set of gestures. This determines what the other flags will mean. If you set flags for pan messages, they will be different from those flags that are set for rotation messages.
The following table indicates the various identifiers for gestures that are supported by the dwID member of the GESTURECONFIG structure. Note that setting dwID to 0 indicates that global gesture configuration flags are set.
GetGestureInfo Function
Retrieves a gesture information structure given a handle to the gesture information.
Syntax
BOOL WINAPI GetGestureInfo(
__in HGESTUREINFO hGestureInfo,
__out PGESTUREINFO pGestureInfo
);
Parameters
hGestureInfo [in]
The gesture information handle.
pGestureInfo [out]
A pointer to the gesture information structure.
Return Value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, use the GetLastError function.
Examples
GESTUREINFO gestureInfo = {0};
gestureInfo.cbSize = sizeof(gestureInfo);
BOOL bResult = GetGestureInfo((HGESTUREINFO)lParam, &gestureInfo);
SetGestureConfig Function
Configures the messages that are sent from a window for multitouch gestures.
Syntax
BOOL WINAPI SetGestureConfig(
__in HWND hwnd,
__in DWORD dwReserved,
__in UINT cIDs,
__in PGESTURECONFIG pGestureConfig,
__in UINT cbSize
);
Parameters
hwnd [in]
A handle to the window to set the gesture configuration on.
dwReserved [in]
This value is reserved and must be set to 0.
cIDs [in]
A count of the gesture configuration structures that are being passed.
pGestureConfig [in]
An array of gesture configuration structures that specify the gesture configuration.
cbSize [in]
The size of the array of gesture configuration structures.
Return Value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, use the GetLastError function.