сообщение WM_GESTURE
Передает сведения о жесте.
Параметры
-
wParam
-
Предоставляет сведения, идентифицирующие команду жеста и значения аргументов для конкретного жеста. Это те же сведения, которые передаются в элементе ullArguments структуры GESTUREINFO .
-
lParam
-
Предоставляет дескриптор сведений, идентифицирующие команду жеста и значения аргументов для конкретного жеста. Эти сведения извлекаются путем вызова GetGestureInfo.
Возвращаемое значение
Если приложение обрабатывает это сообщение, оно должно вернуть значение 0.
Если приложение не обрабатывает сообщение, оно должно вызвать DefWindowProc. Это приведет к утечке памяти в приложении, так как дескриптор сенсорного ввода не будет закрыт, а связанная память процесса не будет освобождена.
Комментарии
В следующей таблице перечислены поддерживаемые команды жестов.
Идентификатор жеста | Value (dwID) | Описание |
---|---|---|
GID_BEGIN | 1 | Указывает, что начинается универсальный жест. |
GID_END | 2 | Указывает конец универсального жеста. |
GID_ZOOM | 3 | Указывает начало масштабирования, перемещение или остановку масштабирования. Первое сообщение команды GID_ZOOM начинает масштабирование, но не приводит к увеличению масштаба. Вторая команда GID_ZOOM активирует масштабирование относительно состояния, содержащегося в первом GID_ZOOM. |
GID_PAN | 4 | Указывает перемещение или начало сдвига сдвига. Первая команда GID_PAN указывает на начало сдвига, но не выполняет сдвиг. Со вторым сообщением команды GID_PAN приложение начнет сдвиг. |
GID_ROTATE | 5 | Указывает на поворот перемещения или поворот начала. Первое сообщение команды GID_ROTATE указывает на поворот или начало поворота, но не будет вращаться. Второе сообщение команды GID_ROTATE активирует операцию поворота относительно состояния, содержащегося в первом GID_ROTATE. |
GID_TWOFINGERTAP | 6 | Указывает жест касания двумя пальцами. |
GID_PRESSANDTAP | 7 | Указывает жест нажатия и касания. |
Примечание
Чтобы включить поддержку устаревших версий, сообщения с GID_BEGIN и GID_END командами жестов должны пересылаться с помощью DefWindowProc.
В следующей таблице указаны аргументы жестов, переданные в параметрах lParam и wParam .
Идентификатор жеста | жесты | ullArgument | ptsLocation в структуре GestureInfo |
---|---|---|---|
GID_ZOOM | Увеличение или уменьшение масштаба | Указывает расстояние между двумя точками. | Указывает центр масштаба. |
GID_PAN | Сдвиг | Указывает расстояние между двумя точками. | Указывает текущее положение сдвига. |
GID_ROTATE | Поворот (сводка) | Указывает угол поворота, если установлен флаг GF_BEGIN . В противном случае это изменение угла с момента начала поворота. Этот элемент со знаком указывает направление поворота. Используйте макросы GID_ROTATE_ANGLE_FROM_ARGUMENT и GID_ROTATE_ANGLE_TO_ARGUMENT , чтобы получить и задать значение угла. | Это указывает центр поворота, который является неподвижной точкой, вокруг которой вращается целевой объект. |
GID_TWOFINGERTAP | Касание двумя пальцами | Указывает расстояние между двумя пальцами. | Указывает центр двух пальцев. |
GID_PRESSANDTAP | Нажатие и касание | Указывает разницу между первым и вторым пальцами. Это значение хранится в нижних 32 битах объекта ullArgument в структуре POINT . | Указывает положение, на которое спускается первый палец. |
Примечание
Все расстояния и позиции указаны в физических координатах экрана.
Примечание
Параметры dwID и ullArgument следует рассматривать только как сопутствующие команды GID_* и не должны изменяться приложениями.
Примеры
В следующем коде показано, как получить сведения о жестах, связанные с этим сообщением.
Примечание
Вы всегда должны пересылать необработанных сообщений в DefWindowProc и закрывать дескриптор ввода жестов для сообщений, которые обрабатываются с помощью вызова CloseGestureInfoHandle. В этом примере поведение обработчика жестов по умолчанию будет подавлено, так как дескриптор TOUCHINPUT закрыт в каждом из вариантов жестов. Если вы удалили варианты в приведенном выше коде для необработанных сообщений, обработчик жестов по умолчанию будет обрабатывать сообщения путем перенаправления в DefWindowProc в случае по умолчанию.
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 [только классические приложения] |
Заголовок |
|