Структура TOUCHINPUT (winuser.h)
Инкапсулирует данные для сенсорного ввода.
Синтаксис
typedef struct tagTOUCHINPUT {
LONG x;
LONG y;
HANDLE hSource;
DWORD dwID;
DWORD dwFlags;
DWORD dwMask;
DWORD dwTime;
ULONG_PTR dwExtraInfo;
DWORD cxContact;
DWORD cyContact;
} TOUCHINPUT, *PTOUCHINPUT;
Члены
x
Координата X (горизонтальная точка) сенсорного ввода. Этот элемент указывается в сотых пикселях физических экранных координат.
y
Координата Y (вертикальная точка) сенсорного ввода. Этот элемент указывается в сотых пикселях физических экранных координат.
hSource
Дескриптор устройства для исходного устройства ввода. Поставщик сенсорного ввода предоставляет каждому устройству уникальный поставщик во время выполнения. См . раздел Примеры ниже.
dwID
Идентификатор точки касания, который отличает определенный сенсорный ввод. Это значение остается согласованным в последовательности сенсорного контакта с точки контакта вниз до тех пор, пока не будет возвращено обратно. Идентификатор может быть повторно использован позже для последующих контактов.
dwFlags
Набор битовых флагов, указывающих различные аспекты нажатия, отпускания и движения в точке касания. Биты в этом элементе могут быть любым разумным сочетанием значений в разделе Примечания.
dwMask
Набор битовых флагов, указывающих, какие из необязательных полей в структуре содержат допустимые значения. Доступность допустимых сведений в необязательных полях зависит от устройства. Приложения должны использовать необязательное значение поля, только если соответствующий бит задан в dwMask. Это поле может содержать сочетание флагов dwMask , упомянутых в разделе Примечания.
dwTime
Метка времени для события в миллисекундах. Приложение-потребитель должно отметить, что система не выполняет проверку этого поля; Если флаг TOUCHINPUTMASKF_TIMEFROMSYSTEM не установлен, точность и последовательность значений в этом поле полностью зависят от поставщика сенсорного ввода.
dwExtraInfo
Дополнительное значение, связанное с событием сенсорного ввода.
cxContact
Ширина контактной области сенсорного ввода в сотых пикселях в координатах физического экрана. Это значение допустимо, только если члену dwMask задан флаг TOUCHEVENTFMASK_CONTACTAREA .
cyContact
Высота контактной области сенсорного ввода в сотых пикселях в физических координатах экрана. Это значение допустимо, только если члену dwMask задан флаг TOUCHEVENTFMASK_CONTACTAREA .
Комментарии
В следующей таблице перечислены флаги для элемента dwFlags .
Флаг | Значение | Описание |
---|---|---|
TOUCHEVENTF_MOVE | 0x0001 | Движение произошло. Нельзя сочетать с TOUCHEVENTF_DOWN. |
TOUCHEVENTF_DOWN | 0x0002 | Соответствующая точка касания была установлена через новый контакт. Не может сочетаться с TOUCHEVENTF_MOVE или TOUCHEVENTF_UP. |
TOUCHEVENTF_UP | 0x0004 | Точка касания удалена. |
TOUCHEVENTF_INRANGE | 0x0008 | Точка касания находится в диапазоне. Этот флаг используется для включения поддержки сенсорного наведении на совместимом оборудовании. Приложения, которые не хотят поддерживать наведение, могут игнорировать этот флаг. |
TOUCHEVENTF_PRIMARY | 0x0010 | Указывает, что эта структура TOUCHINPUT соответствует основной контактной точке. Дополнительные сведения об основных точках касания см. в следующем тексте. |
TOUCHEVENTF_NOCOALESCE | 0x0020 | При получении с помощью GetTouchInputInfo эти входные данные не были объединены. |
TOUCHEVENTF_PEN | 0x0040 | Событие касания было активировано устройством пера. |
TOUCHEVENTF_PALM | 0x0080 | Событие касания было вызвано ладонью пользователя. |
Флаг | Значение | Описание |
---|---|---|
TOUCHINPUTMASKF_CONTACTAREA | 0x0004 | допустимы cxContact и cyContact . Дополнительные сведения об основных точках касания см. в следующем тексте. |
TOUCHINPUTMASKF_EXTRAINFO | 0x0002 | DwExtraInfo является допустимым. |
TOUCHINPUTMASKF_TIMEFROMSYSTEM | 0x0001 | Системное время было задано в структуре TOUCHINPUT . |
Точка касания назначается в качестве основной, когда она является первой точкой касания, установленной из предыдущего состояния без точек касания. Флаг TOUCHEVENTF_PRIMARY по-прежнему устанавливается для всех последующих событий для основной точки касания до тех пор, пока основная точка касания не будет освобождена. Обратите внимание, что событие TOUCHEVENTF_UP в основной точке касания не обязательно обозначает конец операции Windows Touch. текущая операция Windows Touch продолжается с создания основной точки касания до освобождения последней точки касания.
Обратите внимание, что первая обнаруженная точка касания или в наборе одновременных точек касания назначается основной. Положение мыши системы следует за основной точкой касания и, помимо сенсорных сообщений, также создает WM_LBUTTONDOWN, WM_MOUSEMOVE и WM_LBUTTONUP сообщения в ответ на действия в основной точке касания. Основная точка касания также может создавать WM_RBUTTONDOWN и WM_RBUTTONUP сообщения с помощью жеста нажатия и удержания.
Обратите внимание, что идентификатор точки касания может быть динамическим и связан с заданной точкой касания только при условии, что точка касания сохраняется. Если контакт разрывается, а затем возобновляется (например, если палец удаляется с поверхности, а затем снова нажимается), та же точка касания (тот же палец, перо или другое такое устройство) может получить другой идентификатор точки касания.
Следующий тип определяется для представления постоянного указателя на структуру TOUCHINPUT .
typedef TOUCHINPUT const * PCTOUCHINPUT;
Примеры
UINT cInputs = LOWORD(wParam);
PTOUCHINPUT pInputs = new TOUCHINPUT[cInputs];
if (NULL != pInputs)
{
if (GetTouchInputInfo((HTOUCHINPUT)lParam,
cInputs,
pInputs,
sizeof(TOUCHINPUT)))
{
// process pInputs
if (!CloseTouchInputHandle((HTOUCHINPUT)lParam))
{
// error handling
}
}
else
{
// GetLastError() and error handling
}
delete [] pInputs;
}
else
{
// error handling, presumably out of memory
}
return DefWindowProc(hWnd, message, wParam, lParam);
В следующем примере показано, как получить сведения об устройстве из элемента hSource . В этом примере для получения сведений об устройстве используется GetRawInputDevice .
for (UINT i = 0; i < cInputs; i++){
TOUCHINPUT ti = pInputs[i];
RID_DEVICE_INFO info;
ZeroMemory(&info, sizeof(RID_DEVICE_INFO));
info.cbSize = sizeof(RID_DEVICE_INFO);
UINT size = 0;
if (GetRawInputDeviceInfo(ti.hSource, RIDI_DEVICEINFO, &info, &size)){
}else{
DWORD err = GetLastError();
}
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 7 [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 R2 [только классические приложения] |
Верхняя часть | winuser.h (включая Windows.h) |