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 | 터치 이벤트는 사용자의 손바닥에 의해 트리거되었습니다. |
플래그 | 값 | Description |
---|---|---|
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 포함) |