Поделиться через


Структура 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 Событие касания было вызвано ладонью пользователя.
 
Примечание Если целевое оборудование на компьютере не поддерживает наведение, при установке флага TOUCHEVENTF_UP флаг TOUCHEVENTF_INRANGE будет снят. Если целевое оборудование на компьютере поддерживает наведение, флаги TOUCHEVENTF_UP и TOUCHEVENTF_INRANGE будут устанавливаться независимо друг от друга.
 
В следующей таблице перечислены флаги для элемента dwMask .
Флаг Значение Описание
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;
    

Примеры

Примечание В следующем примере массив pInputs не отсортирован. Используйте значение dwID для отслеживания определенных точек касания.
 
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)

См. также раздел

GetTouchInputInfo

Структуры