다음을 통해 공유


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

특정 터치 입력을 구분하는 터치 포인트 식별자입니다. 이 값은 연락처가 내려온 시점부터 다시 돌아올 때까지 터치 접촉 시퀀스에서 일관성을 유지합니다. ID는 나중에 후속 연락처에 다시 사용할 수 있습니다.

dwFlags

터치 포인트 누름, 해제 및 동작의 다양한 측면을 지정하는 비트 플래그 집합입니다. 이 멤버의 비트는 설명 섹션에 있는 값의 적절한 조합일 수 있습니다.

dwMask

구조체에서 유효한 값을 포함하는 선택적 필드를 지정하는 비트 플래그 집합입니다. 선택적 필드에서 유효한 정보의 가용성은 디바이스에 따라 다릅니다. 애플리케이션은 해당 비트가 dwMask에 설정된 경우에만 선택적 필드 값을 사용해야 합니다. 이 필드는 설명 섹션에 언급된 dwMask 플래그의 조합을 포함할 수 있습니다.

dwTime

이벤트에 대한 타임스탬프를 밀리초 단위로 표시합니다. 사용하는 애플리케이션은 시스템에서 이 필드에 대해 유효성 검사를 수행하지 않는다는 점에 유의해야 합니다. TOUCHINPUTMASKF_TIMEFROMSYSTEM 플래그가 설정되지 않은 경우 이 필드의 값의 정확도 및 시퀀싱은 터치 입력 공급자에 완전히 종속됩니다.

dwExtraInfo

터치 이벤트와 연결된 추가 값입니다.

cxContact

실제 화면 좌표에서 수백 픽셀의 터치 접촉 영역 너비입니다. 이 값은 dwMask 멤버에 TOUCHEVENTFMASK_CONTACTAREA 플래그가 설정된 경우에만 유효합니다.

cyContact

실제 화면 좌표에서 수백 픽셀의 터치 접촉 영역 높이입니다. 이 값은 dwMask 멤버에 TOUCHEVENTFMASK_CONTACTAREA 플래그가 설정된 경우에만 유효합니다.

설명

다음 표에서는 dwFlags 멤버에 대한 플래그를 나열합니다.

플래그 Description
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_UPTOUCHEVENTF_INRANGE 플래그가 독립적으로 설정됩니다.
 
다음 표에서는 dwMask 멤버에 대한 플래그를 나열합니다.
플래그 Description
TOUCHINPUTMASKF_CONTACTAREA 0x0004 cxContactcyContact 는 유효합니다. 기본 터치 포인트에 대한 자세한 내용은 다음 텍스트를 참조하세요.
TOUCHINPUTMASKF_EXTRAINFO 0x0002 dwExtraInfo 가 유효합니다.
TOUCHINPUTMASKF_TIMEFROMSYSTEM 0x0001 시스템 시간은 TOUCHINPUT 구조에서 설정되었습니다.
 

터치 포인트는 터치 포인트가 없는 이전 상태에서 설정되는 첫 번째 터치 포인트인 경우 기본으로 지정됩니다. 기본 터치 포인트가 해제될 때까지 기본 터치 포인트에 대한 모든 후속 이벤트에 대해 TOUCHEVENTF_PRIMARY 플래그가 계속 설정됩니다. 기본 터치 지점의 TOUCHEVENTF_UP 이벤트가 반드시 Windows Touch 작업의 끝을 지정하지는 않습니다. 현재 Windows Touch 작업은 기본 터치 지점 설정부터 마지막 터치 포인트가 해제될 때까지 진행됩니다.

단독 터치 포인트 또는 동시 터치 포인트 집합에서 감지되는 첫 번째 터치 지점이 기본으로 지정됩니다. 시스템 마우스 위치는 기본 터치 지점을 따르고 터치 메시지 외에도 기본 터치 포인트의 작업에 대한 응답으로 WM_LBUTTONDOWN, WM_MOUSEMOVEWM_LBUTTONUP 메시지를 생성합니다. 기본 터치 포인트는 길게 누르기 제스처를 사용하여 WM_RBUTTONDOWNWM_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

구조체