- HOME
- Post in | c/c++/winapi
- Post at | 2015. 4. 14. 21:52 | by 밀크빵.
- View comment
WM_GESTURE에서 PAN 입력 받기 (one/ two finger)
WM_GESTURE 메시지를 등록하여 이벤트를 처리할 경우
등록한 OnGesture 함수에 two finger pan의 발생은 들어오는데
One finger pan은 OnGesture이벤트가 발생조차 되지 않는다
이때 모든 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함수에서 flag의 Default는
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
'c/c++ > winapi' 카테고리의 다른 글
window 깜빡임 처리 - WM_ERASEBKGND와 WM_PAINT (0) | 2015.03.10 |
---|---|
인터넷에 연결 되어있는지 확인하는 API (0) | 2014.04.01 |
API _ 선, 박스, 도형 그리기 (0) | 2013.02.20 |
Win32 프로젝트를 빈프로젝트로 생성하여 DialogBox 띄우기 (0) | 2013.02.18 |
활성화된 화면 캡쳐 ScreenCapture (0) | 2013.02.15 |