GESTUREINFO 結構 (winuser.h)
儲存手勢的相關資訊。
語法
typedef struct tagGESTUREINFO {
UINT cbSize;
DWORD dwFlags;
DWORD dwID;
HWND hwndTarget;
POINTS ptsLocation;
DWORD dwInstanceID;
DWORD dwSequenceID;
ULONGLONG ullArguments;
UINT cbExtraArgs;
} GESTUREINFO, *PGESTUREINFO;
成員
cbSize
結構的大小,以位元組為單位。 呼叫端必須將這個 設定為 sizeof(GESTUREINFO)
。
dwFlags
手勢的狀態。 如需詳細資訊,請參閱。
dwID
筆勢命令的識別碼。
hwndTarget
以這個手勢為目標之視窗的控制碼。
ptsLocation
POINTS結構,包含與筆勢相關聯的座標。 這些座標一律與螢幕原點相對。
dwInstanceID
結構的內部使用識別碼。
dwSequenceID
序列的內部使用識別碼。
ullArguments
64 位不帶正負號的整數,其中包含符合 8 個位元組之手勢的引數。
cbExtraArgs
此筆勢隨附之額外引數的大小,以位元組為單位。
備註
ullArguments成員的HIDWORD一律為 0,但有下列例外狀況:
- 若 為 GID_PAN,則為 0,但有慣性時除外。 設定 GF_INERTIA 時, HIDWORD 是慣性向量, (兩個 16 位值) 。
- 針對 GID_PRESSANDTAP,這是兩點之間的距離。
下列旗標表示手勢的各種狀態,並儲存在 dwFlags 中。
名稱 | 值 | 描述 |
---|---|---|
GF_BEGIN | 0x00000001 | 手勢正在啟動。 |
GF_INERTIA | 0x00000002 | 手勢已觸發慣性。 |
GF_END | 0x00000004 | 手勢已完成。 |
注意 大部分的應用程式都應該忽略 GID_BEGIN 和 GID_END 訊息,並將其傳遞至 DefWindowProc。
預設手勢處理常式會使用這些訊息。 當協力廠商應用程式取用 GID_BEGIN 和 GID_END 訊息時,應用程式行為是未定義的。
名稱 | 值 | 描述 |
---|---|---|
GID_BEGIN | 1 | 手勢正在啟動。 |
GID_END | 2 | 手勢即將結束。 |
GID_ZOOM | 3 | 縮放手勢。 |
GID_PAN | 4 | 移動流覽手勢。 |
GID_ROTATE | 5 | 旋轉手勢。 |
GID_TWOFINGERTAP | 6 | 雙指點選手勢。 |
GID_PRESSANDTAP | 7 | 按下並點選手勢。 |
注意GID_PAN手勢具有內建慣性。 在移動流覽手勢結束時,作業系統會建立額外的移動流覽手勢訊息。
typedef GESTUREINFO const * PCGESTUREINFO;
範例
LRESULT DecodeGesture(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
// Create a structure to populate and retrieve the extra message info.
GESTUREINFO gi;
ZeroMemory(&gi, sizeof(GESTUREINFO));
gi.cbSize = sizeof(GESTUREINFO);
BOOL bResult = GetGestureInfo((HGESTUREINFO)lParam, &gi);
BOOL bHandled = FALSE;
if (bResult){
// now interpret the gesture
switch (gi.dwID){
case GID_ZOOM:
// Code for zooming goes here
bHandled = TRUE;
break;
case GID_PAN:
// Code for panning goes here
bHandled = TRUE;
break;
case GID_ROTATE:
// Code for rotation goes here
bHandled = TRUE;
break;
case GID_TWOFINGERTAP:
// Code for two-finger tap goes here
bHandled = TRUE;
break;
case GID_PRESSANDTAP:
// Code for roll over goes here
bHandled = TRUE;
break;
default:
// A gesture was not recognized
break;
}
}else{
DWORD dwErr = GetLastError();
if (dwErr > 0){
//MessageBoxW(hWnd, L"Error!", L"Could not retrieve a GESTUREINFO structure.", MB_OK);
}
}
if (bHandled){
return 0;
}else{
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
規格需求
最低支援的用戶端 | Windows 7 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 R2 [僅限桌面應用程式] |
標頭 | winuser.h (包含 Windows.h) |