多触摸学些
来源:互联网 发布:触屏软件 编辑:程序博客网 时间:2024/05/16 12:27
内容很多,我这里主要采用引用的形式说明:
1.程序引导篇:
基于Visual C++2010与windows SDK fo windows7开发Windows 7的多点触摸特性应用程序(1)
基于Visual C++2010与windows SDK fo windows7开发Windows 7的多点触摸特性应用程序(2)--手势识别应用
Build a Multitouch Gesture Application
2.调试篇
作为开发者对MT 应用程序进行测试的时候,当然需要MT 硬件设备的支持,否则我们无法判断程序是否能够正常运行。虽然现在市面上的MT 设备已经很多,但价格也都不菲。如果没有多点触控设备能否进行MT 程序的开发与测试呢? 答案当然是可以的。
Windows 7 安装多点触屏模拟器
3。手势学习
vs2010中学习, 直接将一些API函数,,结构体,宏定义等挖出来。
如:winbuser.h中
#if(WINVER >= 0x0601) /* * Touch Input defines and functions */ /* * Touch input handle */DECLARE_HANDLE(HTOUCHINPUT); 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;typedef TOUCHINPUT const * PCTOUCHINPUT; /* * Conversion of touch input coordinates to pixels */#define TOUCH_COORD_TO_PIXEL(l) ((l) / 100) /* * Touch input flag values (TOUCHINPUT.dwFlags) */#define TOUCHEVENTF_MOVE 0x0001#define TOUCHEVENTF_DOWN 0x0002#define TOUCHEVENTF_UP 0x0004#define TOUCHEVENTF_INRANGE 0x0008#define TOUCHEVENTF_PRIMARY 0x0010#define TOUCHEVENTF_NOCOALESCE 0x0020#define TOUCHEVENTF_PEN 0x0040#define TOUCHEVENTF_PALM 0x0080 /* * Touch input mask values (TOUCHINPUT.dwMask) */#define TOUCHINPUTMASKF_TIMEFROMSYSTEM 0x0001 // the dwTime field contains a system generated value#define TOUCHINPUTMASKF_EXTRAINFO 0x0002 // the dwExtraInfo field is valid#define TOUCHINPUTMASKF_CONTACTAREA 0x0004 // the cxContact and cyContact fields are valid WINUSERAPIBOOLWINAPIGetTouchInputInfo( __in HTOUCHINPUT hTouchInput, // input event handle; from touch message lParam __in UINT cInputs, // number of elements in the array __out_ecount(cInputs) PTOUCHINPUT pInputs, // array of touch inputs __in int cbSize); // sizeof(TOUCHINPUT) WINUSERAPIBOOLWINAPICloseTouchInputHandle( __in HTOUCHINPUT hTouchInput); // input event handle; from touch message lParam /* * RegisterTouchWindow flag values */#define TWF_FINETOUCH (0x00000001)#define TWF_WANTPALM (0x00000002) WINUSERAPIBOOLWINAPIRegisterTouchWindow( __in HWND hwnd, __in ULONG ulFlags); WINUSERAPIBOOLWINAPIUnregisterTouchWindow( __in HWND hwnd); WINUSERAPIBOOLWINAPIIsTouchWindow( __in HWND hwnd, __out_opt PULONG pulFlags); #endif /* WINVER >= 0x0601 */ #if(WINVER >= 0x0601) /* * Gesture defines and functions */ /* * Gesture information handle */DECLARE_HANDLE(HGESTUREINFO); /* * Gesture flags - GESTUREINFO.dwFlags */#define GF_BEGIN 0x00000001#define GF_INERTIA 0x00000002#define GF_END 0x00000004 /* * Gesture IDs */#define GID_BEGIN 1#define GID_END 2#define GID_ZOOM 3#define GID_PAN 4#define GID_ROTATE 5#define GID_TWOFINGERTAP 6#define GID_PRESSANDTAP 7#define GID_ROLLOVER GID_PRESSANDTAP /* * Gesture information structure * - Pass the HGESTUREINFO received in the WM_GESTURE message lParam into the * GetGestureInfo function to retrieve this information. * - If cbExtraArgs is non-zero, pass the HGESTUREINFO received in the WM_GESTURE * message lParam into the GetGestureExtraArgs function to retrieve extended * argument information. */typedef struct tagGESTUREINFO { UINT cbSize; // size, in bytes, of this structure (including variable length Args field) DWORD dwFlags; // see GF_* flags DWORD dwID; // gesture ID, see GID_* defines HWND hwndTarget; // handle to window targeted by this gesture POINTS ptsLocation; // current location of this gesture DWORD dwInstanceID; // internally used DWORD dwSequenceID; // internally used ULONGLONG ullArguments; // arguments for gestures whose arguments fit in 8 BYTES UINT cbExtraArgs; // size, in bytes, of extra arguments, if any, that accompany this gesture} GESTUREINFO, *PGESTUREINFO;typedef GESTUREINFO const * PCGESTUREINFO; /* * Gesture notification structure * - The WM_GESTURENOTIFY message lParam contains a pointer to this structure. * - The WM_GESTURENOTIFY message notifies a window that gesture recognition is * in progress and a gesture will be generated if one is recognized under the * current gesture settings. */typedef struct tagGESTURENOTIFYSTRUCT { UINT cbSize; // size, in bytes, of this structure DWORD dwFlags; // unused HWND hwndTarget; // handle to window targeted by the gesture POINTS ptsLocation; // starting location DWORD dwInstanceID; // internally used} GESTURENOTIFYSTRUCT, *PGESTURENOTIFYSTRUCT; /* * Gesture argument helpers * - Angle should be a double in the range of -2pi to +2pi * - Argument should be an unsigned 16-bit value */#define GID_ROTATE_ANGLE_TO_ARGUMENT(_arg_) ((USHORT)((((_arg_) + 2.0 * 3.14159265) / (4.0 * 3.14159265)) * 65535.0))#define GID_ROTATE_ANGLE_FROM_ARGUMENT(_arg_) ((((double)(_arg_) / 65535.0) * 4.0 * 3.14159265) - 2.0 * 3.14159265) /* * Gesture information retrieval * - HGESTUREINFO is received by a window in the lParam of a WM_GESTURE message. */WINUSERAPIBOOLWINAPIGetGestureInfo( __in HGESTUREINFO hGestureInfo, __out PGESTUREINFO pGestureInfo); /* * Gesture extra arguments retrieval * - HGESTUREINFO is received by a window in the lParam of a WM_GESTURE message. * - Size, in bytes, of the extra argument data is available in the cbExtraArgs * field of the GESTUREINFO structure retrieved using the GetGestureInfo function. */WINUSERAPIBOOLWINAPIGetGestureExtraArgs( __in HGESTUREINFO hGestureInfo, __in UINT cbExtraArgs, __out_bcount(cbExtraArgs) PBYTE pExtraArgs); /* * Gesture information handle management * - If an application processes the WM_GESTURE message, then once it is done * with the associated HGESTUREINFO, the application is responsible for * closing the handle using this function. Failure to do so may result in * process memory leaks. * - If the message is instead passed to DefWindowProc, or is forwarded using * one of the PostMessage or SendMessage class of API functions, the handle * is transfered with the message and need not be closed by the application. */WINUSERAPIBOOLWINAPICloseGestureInfoHandle( __in HGESTUREINFO hGestureInfo); /* * Gesture configuration structure * - Used in SetGestureConfig and GetGestureConfig * - Note that any setting not included in either GESTURECONFIG.dwWant or * GESTURECONFIG.dwBlock will use the parent window's preferences or * system defaults. */typedef struct tagGESTURECONFIG { DWORD dwID; // gesture ID DWORD dwWant; // settings related to gesture ID that are to be turned on DWORD dwBlock; // settings related to gesture ID that are to be turned off} GESTURECONFIG, *PGESTURECONFIG; /* * Gesture configuration flags - GESTURECONFIG.dwWant or GESTURECONFIG.dwBlock */ /* * Common gesture configuration flags - set GESTURECONFIG.dwID to zero */#define GC_ALLGESTURES 0x00000001 /* * Zoom gesture configuration flags - set GESTURECONFIG.dwID to GID_ZOOM */#define GC_ZOOM 0x00000001 /* * Pan gesture configuration flags - set GESTURECONFIG.dwID to GID_PAN */#define GC_PAN 0x00000001#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 /* * Rotate gesture configuration flags - set GESTURECONFIG.dwID to GID_ROTATE */#define GC_ROTATE 0x00000001 /* * Two finger tap gesture configuration flags - set GESTURECONFIG.dwID to GID_TWOFINGERTAP */#define GC_TWOFINGERTAP 0x00000001 /* * PressAndTap gesture configuration flags - set GESTURECONFIG.dwID to GID_PRESSANDTAP */#define GC_PRESSANDTAP 0x00000001#define GC_ROLLOVER GC_PRESSANDTAP #define GESTURECONFIGMAXCOUNT 256 // Maximum number of gestures that can be included // in a single call to SetGestureConfig / GetGestureConfig WINUSERAPIBOOLWINAPISetGestureConfig( __in HWND hwnd, // window for which configuration is specified __in DWORD dwReserved, // reserved, must be 0 __in UINT cIDs, // count of GESTURECONFIG structures __in_ecount(cIDs) PGESTURECONFIG pGestureConfig, // array of GESTURECONFIG structures, dwIDs will be processed in the // order specified and repeated occurances will overwrite previous ones __in UINT cbSize); // sizeof(GESTURECONFIG) #define GCF_INCLUDE_ANCESTORS 0x00000001 // If specified, GetGestureConfig returns consolidated configuration // for the specified window and it's parent window chain WINUSERAPIBOOLWINAPIGetGestureConfig( __in HWND hwnd, // window for which configuration is required __in DWORD dwReserved, // reserved, must be 0 __in DWORD dwFlags, // see GCF_* flags __in PUINT pcIDs, // *pcIDs contains the size, in number of GESTURECONFIG structures, // of the buffer pointed to by pGestureConfig __inout_ecount(*pcIDs) PGESTURECONFIG pGestureConfig, // pointer to buffer to receive the returned array of GESTURECONFIG structures __in UINT cbSize); // sizeof(GESTURECONFIG) #endif /* WINVER >= 0x0601 */ #if(WINVER >= 0x0601) /* * GetSystemMetrics(SM_DIGITIZER) flag values */#define NID_INTEGRATED_TOUCH 0x00000001#define NID_EXTERNAL_TOUCH 0x00000002#define NID_INTEGRATED_PEN 0x00000004#define NID_EXTERNAL_PEN 0x00000008#define NID_MULTI_INPUT 0x00000040#define NID_READY 0x00000080 #endif /* WINVER >= 0x0601 */ cwnd类中有一些东东值得挖掘: // for touch: /// <summary>/// Register/Unregister window Windows touch support</summary>/// <returns> /// TRUE if succeeds; otherwise FALSE.</returns>/// <param name="bRegister">TRUE - register Windows touch support; FALSE - otherwise.</param>/// <param name="ulFlags">A set of bit flags that specify optional modifications. This field may contain 0 or one of the following values: TWF_FINETOUCH; TWF_WANTPALM</param>BOOL RegisterTouchWindow(BOOL bRegister = TRUE, ULONG ulFlags = 0); /// <summary>/// Specifies whether CWnd has touch support</summary>/// <returns> /// TRUE if CWnd has touch support; otherwise FALSE.</returns>BOOL IsTouchWindow() const; // gesture:#if (WINVER >= 0x0601)/// <summary>/// Set gesture touch paramaters</summary>/// <returns> /// TRUE if succeeds; otherwise FALSE.</returns>/// <param name="pConfig">Pointer to CGestureConfig. Cannot be NULL.</param>BOOL SetGestureConfig(CGestureConfig* pConfig); /// <summary>/// Get gesture touch paramaters</summary>/// <returns> /// TRUE if succeeds; otherwise FALSE.</returns>/// <param name="pConfig">Pointer to CGestureConfig. Cannot be NULL.</param>BOOL GetGestureConfig(CGestureConfig* pConfig); /// <summary>/// Returns the current gesture information (PGESTUREINFO)</summary>/// <returns> /// Pointer to the current gesture info.</returns>const PGESTUREINFO GetCurrentGestureInfo() const{return m_pCurrentGestureInfo;}#endif // for touch:BOOL m_bIsTouchWindowRegistered;/// <summary>/// Process inputs from Windows touch</summary>/// <returns> /// TRUE if application processes Windows touch inputs; otherwise FALSE.</returns>/// <param name="nInputsCount">total number of Windows touch inputs.</param>/// <param name="pInputs">array of TOUCHINPUT.</param>virtual BOOL OnTouchInputs(UINT nInputsCount, PTOUCHINPUT pInputs); /// <summary>/// Process single input from Windows touch</summary>/// <returns> /// TRUE if application processes Windows touch input; otherwise FALSE.</returns>/// <param name="pt">point where screen has been tocuhed (in the client coordinates).</param>/// <param name="nInputNumber">number of touch input.</param>/// <param name="nInputsCount">total number of touch inputs.</param>/// <param name="pInput">pointer to TOUCHINPUT structure.</param>virtual BOOL OnTouchInput(CPoint pt, int nInputNumber, int nInputsCount, PTOUCHINPUT pInput); /// <summary>/// The methods is called when the system asks a window which system gestures it would like to receive</summary>/// <returns> /// A value indicating which system gestures the window would like to receive (TABLET_* flags, see WM_TABLET_QUERYSYSTEMGESTURESTATUS message).</returns>/// <param name="ptTouch">point where screen has been tocuhed (in the client coordinates).</param>virtual ULONG GetGestureStatus(CPoint ptTouch); // for gesture:CPoint m_ptGestureFrom;ULONGLONG m_ulGestureArg;BOOL m_bGestureInited;PGESTUREINFO m_pCurrentGestureInfo; /// <summary>/// The method is called upon gesture zoom event</summary>/// <returns> /// TRUE if application processes this event; otherwise FALSE.</returns>/// <param name="ptCenter">Zoom center point. In client coordinates</param>/// <param name="lDelta">The distance from the center point. In pixels</param>virtual BOOL OnGestureZoom(CPoint ptCenter, long lDelta); /// <summary>/// The method is called upon gesture pan event</summary>/// <returns> /// TRUE if application processes this event; otherwise FALSE.</returns>/// <param name="ptFrom">Pan starting point. In client coordinates</param>/// <param name="ptTo">Pan current point. In client coordinates</param>virtual BOOL OnGesturePan(CPoint ptFrom, CPoint ptTo); /// <summary>/// The method is called upon gesture rotate event</summary>/// <returns> /// TRUE if application processes this event; otherwise FALSE.</returns>/// <param name="ptCenter">Rotation center point. In client coordinates</param>/// <param name="dblAngle">Rotation angle. In radians</param>virtual BOOL OnGestureRotate(CPoint ptCenter, double dblAngle); /// <summary>/// The method is called upon gesture 2 finger tap event</summary>/// <returns> /// TRUE if application processes this event; otherwise FALSE.</returns>/// <param name="ptCenter">Center point between 2 fingers. In client coordinates</param>virtual BOOL OnGestureTwoFingerTap(CPoint ptCenter); /// <summary>/// The method is called upon gesture press and tap event</summary>/// <returns> /// TRUE if application processes this event; otherwise FALSE.</returns>/// <param name="ptPress">"Pressed" point. In client coordinates</param>/// <param name="lDelta">The distance from the "pressed" point. In pixels</param>virtual BOOL OnGesturePressAndTap(CPoint ptPress, long lDelta);
- 多触摸学些
- 凉鞋学spritekit 实现单点触摸/触控
- 第25章、OnTouchListener触摸事件(从零开始学Android)
- 一步一步学android之事件篇——触摸事件
- 从零开始学android:Android事件处理—触摸事件
- 第25章、OnTouchListener触摸事件(从零开始学Android)
- AJ学IOS(25)UI之触摸事件
- 从零学React Native之09可触摸组件
- 从头学cocos2d-x——精灵触摸
- 多触摸学习
- 多指触摸事件
- IOS触摸事件处理(如何处理多个触摸点)
- 从Delphi开始学Cocos2dx-3.0[5]:鼠标按下移动弹起与单点触摸
- AJ学IOS(09)UI之UIScrollView代理触摸实现_图片缩放
- Cocos2d触摸:单点触摸
- Cocos2d触摸:多点触摸
- 开始学些virtools
- 学了些什么?
- a:link,a:visited,a:hover,a:active,伪类的顺序
- 浏览器并发资源
- 解决下载android源码时出现的无法连接问题
- win8 64位+opencv2.4.5+vs2010环境搭建
- 项目管理之项目基础概念
- 多触摸学些
- Linux操作系统下关于文件目录的属性意义
- Java多态性的不同表现
- 编译简介
- doGet和doPost的区别
- 如何在软件设计中运用UML
- linux下 用cpuid指令读取CPU信息
- 求数组中最长递增子序列
- Boost库bind函数的嵌套调用