WM_GESTURE 메시지
제스처에 대한 정보를 전달합니다.
매개 변수
-
wParam
-
제스처 명령 및 제스처 관련 인수 값을 식별하는 정보를 제공합니다. 이 정보는 GESTUREINFO 구조체의 ullArguments 멤버에 전달된 것과 동일한 정보입니다.
-
lParam
-
제스처 명령 및 제스처 관련 인수 값을 식별하는 정보에 대한 핸들을 제공합니다. 이 정보는 GetGestureInfo를 호출하여 검색됩니다.
반환 값
애플리케이션이 이 메시지를 처리하는 경우 0을 반환해야 합니다.
애플리케이션이 메시지를 처리하지 않는 경우 DefWindowProc을 호출해야 합니다. 이렇게 하지 않으면 터치 입력 핸들이 닫혀 있지 않고 연결된 프로세스 메모리가 해제되지 않으므로 애플리케이션에서 메모리가 누수됩니다.
설명
다음 표에서는 지원되는 제스처 명령을 나열합니다.
제스처 ID | 값(dwID) | Description |
---|---|---|
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 매개 변수에 전달된 제스처 인수를 나타냅니다.
제스처 ID | 제스처 | ullArgument | GestureInfo 구조의 ptsLocation |
---|---|---|---|
GID_ZOOM | 확대/축소 | 두 점 사이의 거리를 나타냅니다. | 확대/축소의 중심을 나타냅니다. |
GID_PAN | 이동 | 두 점 사이의 거리를 나타냅니다. | 팬의 현재 위치를 나타냅니다. |
GID_ROTATE | 회전(피벗) | GF_BEGIN 플래그가 설정된 경우 회전 각도를 나타냅니다. 그렇지 않으면 회전이 시작된 이후의 각도 변경입니다. 회전 방향을 나타내기 위해 서명됩니다. GID_ROTATE_ANGLE_FROM_ARGUMENT 및 GID_ROTATE_ANGLE_TO_ARGUMENT 매크로를 사용하여 각도 값을 가져와서 설정합니다. | 이는 대상 개체가 회전되는 고정 지점인 회전의 중심을 나타냅니다. |
GID_TWOFINGERTAP | 두 손가락 탭 | 두 손가락 사이의 거리를 나타냅니다. | 두 손가락의 중심을 나타냅니다. |
GID_PRESSANDTAP | 길게 누르기 | 첫 번째 손가락과 두 번째 손가락 사이의 델타를 나타냅니다. 이 값은 POINT 구조체에서 ullArgument의 하위 32비트 에 저장됩니다. | 첫 번째 손가락이 내려 오는 위치를 나타냅니다. |
참고
모든 거리와 위치는 실제 화면 좌표로 제공됩니다.
참고
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 [데스크톱 앱만 해당] |
헤더 |
|