多触摸学些

来源:互联网 发布:触屏软件 编辑:程序博客网 时间: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);


原创粉丝点击