Структура 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
Размер (в байтах) дополнительных аргументов, сопровождающих этот жест.
Комментарии
HIDWORD элемента ullArguments всегда равно 0, за следующими исключениями:
- Для GID_PAN значение равно 0, за исключением случаев, когда имеется инерция. Если задано GF_INERTIA , HIDWORD является вектором инерции (два 16-разрядных значения).
- Для GID_PRESSANDTAP это расстояние между двумя точками.
Следующие флаги указывают различные состояния жестов и хранятся в dwFlags.
Имя | Значение | Описание |
---|---|---|
GF_BEGIN | 0x00000001 | Начинается жест. |
GF_INERTIA | 0x00000002 | Жест вызвал инерцию. |
GF_END | 0x00000004 | Жест завершен. |
Имя | Значение | Описание |
---|---|---|
GID_BEGIN | 1 | Начинается жест. |
GID_END | 2 | Жест заканчивается. |
GID_ZOOM | 3 | Жест масштабирования. |
GID_PAN | 4 | Жест сдвига. |
GID_ROTATE | 5 | Жест поворота. |
GID_TWOFINGERTAP | 6 | Жест касания двумя пальцами. |
GID_PRESSANDTAP | 7 | Жест нажатия и касания. |
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) |