WM_GESTURE에서 PAN 입력 받기 (one/ two finger)

 

WM_GESTURE 메시지를 등록하여 이벤트를 처리할 경우

등록한 OnGesture 함수에 two finger pan의 발생은 들어오는데

One finger panOnGesture이벤트가 발생조차 되지 않는다

 

이때 모든 pan 동작에 대하여 메시지를 받을 수 있도록

WM_GESTURENOTIFY 메시지에서 Gesture를 설정해주어야 한다.

 



    switch (message)

    {

    case WM_GESTURENOTIFY:

        GESTURECONFIG gc = {0,GC_ALLGESTURES,0};

        BOOL bResult = SetGestureConfig(hWnd,0,1,&gc,sizeof(GESTURECONFIG));

           

        if(!bResult)

        {

            // an error

        }

        return DefWindowProc(hWnd, WM_GESTURENOTIFY, wParam, lParam);

    }

     

 

 

WM_GESUTRENOTIFY에서 SetGestureConfig를 이용하여 어떤 제스처에 대해서만 메시지를 받을지 설정하고 나면

해당하는 제스처가 발생했을 경우 WM_GESTURE 메시지를 받을 수 있다

 

SetGestureConfig 함수를 이용하여 설정하기 위해서는 CGestureConfig 객체를 인자로 넘겨주는데

CGestureConfig로 제스처 사용 여부를 설정하는 방법은 해당하는 제스처의 Enable 함수를 호출하면 된다

 

Ex)

Pan 동작에 대하여 메시지를 설정하려면

EnablePan() 함수를 호출하여 Pan 동작 사용시에는 EnablePan(TRUE), EnablePan(FALSE)의 값으로 설정해준다

 

Pan의 경우 여러가지 동작이 있는데

#define GC_PAN_WITH_SINGLE_FINGER_VERTICALLY        0x00000002

#define GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY      0x00000004

#define GC_PAN_WITH_GUTTER                          0x00000008

#define GC_PAN_WITH_INERTIA                         0x00000010

 

EnablePan함수에서 flagDefault는  

GC_PAN_WITH_GUTTER | GC_PAN_WITH_INERTIA 로 되어 있어서,

한 손가락에 대한 터치 제스처를 받기 위해서는  GC_PAN_WITH_SINGLE_FINGER_VERTICALLY | GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY 값도 flag 설정을 해주어야 한다

 

그래서 모든 Pan 동작을 받기 위하여

gestureConfig.EnablePan(TRUE, GC_PAN);

로 설정을 해주었다

 

WM_GESTURE 관한 내용

https://msdn.microsoft.com/en-us/library/windows/desktop/dd353243(v=vs.85).aspx