基于Visual C 2010与windows SDK fo windows7开发windows7平台的tabletp

本文介绍了如何使用Visual C++2010和Windows SDK for Windows7开发Tablet PC应用,详细讲解了从创建工程到手写轨迹输入、多语言识别的流程,并展示了各个阶段的效果。文章还提供了核心代码的解析,包括COM指针、手写引擎对象等关键部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

基于Visual C++2010与windows SDK fo windows7开发windows7平台的tabletpc应用(2)-汉字文档手写轨迹输入多语言识别

 

大家先看看流程与效果,然后我来讲解代码,

1.VS2010帅气的启动画面

 

2.VS2010的工程画面

 

3。程序最终生成画面

4.程序启动画面

 

 

5 程序运行画面

 

6.程序枚举所有的语言识别手写识别器

7 英文识别范例

 

8。韩文识别范例

9.中文识别范例

 

10.线条式文档

 

 

11.格子式样文档

12.书写向导模式

13.tablet pc的笔势

 

 

核心代码讲解如下

 核心头文件代码讲解

  1. #pragma once  
  2.   
  3.   
  4. class CAdvRecoApp :   
  5.     public CWindowImpl<CAdvRecoApp>,  
  6.     public IInkCollectorEventsImpl<CAdvRecoApp>,  
  7.     public IInkRecognitionEventsImpl<CAdvRecoApp>  
  8. {  
  9. public:  
  10.     // 常量  
  11.   
  12.     enum {   
  13.         // 子指数  
  14.         mc_iSubmenuRecognizers = 1,   
  15.         mc_iSubmenuInputScopes = 2,   
  16.         mc_iSubmenuGuides = 3,  
  17.         mc_iSubmenuModes = 4,  
  18.         // child windows IDs  
  19.         mc_iInputWndId = 1,   
  20.         mc_iOutputWndId = 2,   
  21.         mc_iStatusWndId = 3,  
  22.         mc_iSSGestLVId = 4,  
  23.         mc_iMSGestLVId = 5,  
  24.         // 识别指南框数据  
  25.         mc_iNumRowsCols = 100,  
  26.         mc_iGuideColWidth = 100,   
  27.         mc_iGuideRowHeight = 100,  
  28.         mc_cxBoxMargin = 4,  
  29.         mc_cyBoxMargin = 4,  
  30.         // t宽度  
  31.         mc_cxGestLVWidth = 160,   
  32.         // 格子数目  
  33.         mc_cNumSSGestures = 36,     // single stroke gestures  
  34.         mc_cNumMSGestures =  6,     // multi-stroke gestures  
  35.         // 笔的笔记宽度  
  36.         mc_iPenWidth = 5  
  37.     };  
  38.   
  39.     // COM指针,手写引擎的对象指针  
  40.     CComPtr<IInkCollector>          m_spIInkCollector;  
  41.     CComPtr<IInkRenderer>           m_spIInkRenderer;  
  42.     CComPtr<IInkDisp>               m_spIInkDisp;  
  43.     CComPtr<IInkStrokes>            m_spIInkStrokes;  
  44.     CComPtr<IInkRecognizerContext>  m_spIInkRecoContext;  
  45.     CComPtr<IInkRecognizers>        m_spIInkRecognizers;  
  46.     CComPtr<IInkRecognizerGuide>    m_spIInkRecoGuide;  
  47.   
  48.     // 子窗口  
  49.     CInkInputWnd    m_wndInput;  
  50.     CRecoOutputWnd  m_wndResults;  
  51.     HWND            m_hwndStatusBar;  
  52.     HWND            m_hwndSSGestLV;     
  53.     HWND            m_hwndMSGestLV;      
  54.   
  55.     // 定义数据变量  
  56.     UINT            m_nCmdRecognizer;  
  57.     UINT            m_nCmdInputScope;  
  58.     UINT            m_nCmdGuide;  
  59.     UINT            m_nCmdMode;  
  60.     CComBSTR        m_bstrCurRecoName;  
  61.     bool            m_bCoerceInputScope;  
  62.     SIZE            m_szGuideBox;  
  63.     bool            m_bAllSSGestures;  
  64.     bool            m_bAllMSGestures;  
  65.   
  66.     // 创建  
  67.     static int Run(int nCmdShow);  
  68.   
  69.     //程序启动  
  70.     CAdvRecoApp() :  
  71.         m_hwndStatusBar(NULL), m_hwndSSGestLV(NULL), m_hwndMSGestLV(NULL),  
  72.         m_bCoerceInputScope(false),   
  73.         m_nCmdGuide(0), m_nCmdInputScope(0), m_nCmdRecognizer(0), m_nCmdMode(0),  
  74.         m_bAllSSGestures(true), m_bAllMSGestures(true)  
  75.     {  
  76.         m_szGuideBox.cx = m_szGuideBox.cy = 0;  
  77.     }  
  78.   
  79.     // 所有程序方法  
  80.     HMENU   LoadMenu();  
  81.     bool    CreateChildWindows();  
  82.     void    UpdateLayout();  
  83.     void    UpdateMenuRadioItems(UINT iSubMenu, UINT idCheck, UINT idUncheck);  
  84.     void    UpdateInputScopeMenu();  
  85.     void    UpdateStatusBar();  
  86.     bool    UseRecognizer(IInkRecognizer* pIInkRecognizer);  
  87.     bool    GetGestureName(InkApplicationGesture idGesture, UINT& idGestureName);  
  88.     void    PresetGestures();  
  89.       
  90.   
  91.   
  92. DECLARE_WND_CLASS_EX(NULL, 0, -1)  
  93.       
  94. BEGIN_MSG_MAP(CAdvRecoApp)  
  95.     MESSAGE_HANDLER(WM_CREATE, OnCreate)  
  96.     MESSAGE_HANDLER(WM_DESTROY, OnDestroy)  
  97.     MESSAGE_HANDLER(WM_SIZE, OnSize)  
  98.     COMMAND_ID_HANDLER(ID_RECOGNIZER_DEFAULT, OnRecognizer)  
  99.     COMMAND_RANGE_HANDLER(ID_RECOGNIZER_FIRST, ID_RECOGNIZER_LAST, OnRecognizer)  
  100.     COMMAND_ID_HANDLER(ID_INPUTSCOPE_COERCE, OnInputScopeCoerce)  
  101.     COMMAND_RANGE_HANDLER(ID_INPUTSCOPE_FIRST, ID_INPUTSCOPE_LAST, OnInputScope)  
  102.     COMMAND_ID_HANDLER(ID_GUIDE_NONE, OnGuide)  
  103.     COMMAND_ID_HANDLER(ID_GUIDE_LINES, OnGuide)  
  104.     COMMAND_ID_HANDLER(ID_GUIDE_BOXES, OnGuide)  
  105.     COMMAND_ID_HANDLER(ID_MODE_INK, OnMode)  
  106.     COMMAND_ID_HANDLER(ID_MODE_INK_AND_GESTURES, OnMode)  
  107.     COMMAND_ID_HANDLER(ID_MODE_GESTURES, OnMode)  
  108.     COMMAND_ID_HANDLER(ID_RECOGNIZE, OnRecognize)  
  109.     COMMAND_ID_HANDLER(ID_CLEAR, OnClear)  
  110.     COMMAND_ID_HANDLER(ID_EXIT, OnExit)  
  111.     NOTIFY_HANDLER(mc_iSSGestLVId, LVN_COLUMNCLICK, OnLVColumnClick)  
  112.     NOTIFY_HANDLER(mc_iMSGestLVId, LVN_COLUMNCLICK, OnLVColumnClick)  
  113.     NOTIFY_HANDLER(mc_iSSGestLVId, LVN_ITEMCHANGING, OnLVItemChanging)  
  114.     NOTIFY_HANDLER(mc_iMSGestLVId, LVN_ITEMCHANGING, OnLVItemChanging)  
  115. END_MSG_MAP()  
  116.   
  117. public:  
  118.   
  119.     // 消息函数  
  120.     LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);  
  121.     LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);  
  122.     LRESULT OnSetFocus(UINTWPARAMLPARAMBOOL& bHandled);  
  123.     LRESULT OnSize(UINTWPARAMLPARAMBOOL& bHandled);  
  124.     LRESULT OnLVColumnClick(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);  
  125.     LRESULT OnLVItemChanging(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);  
  126.       
  127.     // 命令句柄  
  128.     LRESULT OnRecognizer(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);  
  129.     LRESULT OnInputScopeCoerce(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);  
  130.     LRESULT OnInputScope(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);  
  131.     LRESULT OnGuide(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);  
  132.     LRESULT OnMode(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);  
  133.     LRESULT OnRecognize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);  
  134.     LRESULT OnClear(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);  
  135.     LRESULT OnExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);  
  136.   
  137.     // 笔迹句柄  
  138.     HRESULT OnStroke(IInkCursor* pIInkCursor, IInkStrokeDisp* pIInkStroke,   
  139.                      VARIANT_BOOL* pbCancel);  
  140.     HRESULT OnGesture(IInkCursor* pIInkCursor, IInkStrokes* pIInkStrokes,   
  141.                       VARIANT vGestures, VARIANT_BOOL* pbCancel);  
  142.   
  143.     //识别器句柄  
  144.     HRESULT OnRecognitionWithAlternates(IInkRecognitionResult* pIInkRecoResult,   
  145.                                         VARIANT vCustomParam,  
  146.                                         InkRecognitionStatus RecognitionStatus);  
  147. };  
#pragma onceclass CAdvRecoApp :     public CWindowImpl<CAdvRecoApp>,    public IInkCollectorEventsImpl<CAdvRecoApp>,    public IInkRecognitionEventsImpl<CAdvRecoApp>{public:    // 常量    enum {         // 子指数        mc_iSubmenuRecognizers = 1,         mc_iSubmenuInputScopes = 2,         mc_iSubmenuGuides = 3,        mc_iSubmenuModes = 4,        // child windows IDs        mc_iInputWndId = 1,         mc_iOutputWndId = 2,         mc_iStatusWndId = 3,        mc_iSSGestLVId = 4,        mc_iMSGestLVId = 5,        // 识别指南框数据        mc_iNumRowsCols = 100,        mc_iGuideColWidth = 100,         mc_iGuideRowHeight = 100,        mc_cxBoxMargin = 4,        mc_cyBoxMargin = 4,        // t宽度        mc_cxGestLVWidth = 160,         // 格子数目        mc_cNumSSGestures = 36,     // single stroke gestures        mc_cNumMSGestures =  6,     // multi-stroke gestures        // 笔的笔记宽度        mc_iPenWidth = 5    };    // COM指针,手写引擎的对象指针    CComPtr<IInkCollector>          m_spIInkCollector;    CComPtr<IInkRenderer>           m_spIInkRenderer;    CComPtr<IInkDisp>               m_spIInkDisp;    CComPtr<IInkStrokes>            m_spIInkStrokes;    CComPtr<IInkRecognizerContext>  m_spIInkRecoContext;    CComPtr<IInkRecognizers>        m_spIInkRecognizers;    CComPtr<IInkRecognizerGuide>    m_spIInkRecoGuide;    // 子窗口    CInkInputWnd    m_wndInput;    CRecoOutputWnd  m_wndResults;    HWND            m_hwndStatusBar;    HWND            m_hwndSSGestLV;       HWND            m_hwndMSGestLV;        // 定义数据变量    UINT            m_nCmdRecognizer;    UINT            m_nCmdInputScope;    UINT            m_nCmdGuide;    UINT            m_nCmdMode;    CComBSTR        m_bstrCurRecoName;    bool            m_bCoerceInputScope;    SIZE            m_szGuideBox;    bool            m_bAllSSGestures;    bool            m_bAllMSGestures;    // 创建    static int Run(int nCmdShow);    //程序启动    CAdvRecoApp() :        m_hwndStatusBar(NULL), m_hwndSSGestLV(NULL), m_hwndMSGestLV(NULL),        m_bCoerceInputScope(false),         m_nCmdGuide(0), m_nCmdInputScope(0), m_nCmdRecognizer(0), m_nCmdMode(0),        m_bAllSSGestures(true), m_bAllMSGestures(true)    {        m_szGuideBox.cx = m_szGuideBox.cy = 0;    }    // 所有程序方法    HMENU   LoadMenu();    bool    CreateChildWindows();    void    UpdateLayout();    void    UpdateMenuRadioItems(UINT iSubMenu, UINT idCheck, UINT idUncheck);    void    UpdateInputScopeMenu();    void    UpdateStatusBar();    bool    UseRecognizer(IInkRecognizer* pIInkRecognizer);    bool    GetGestureName(InkApplicationGesture idGesture, UINT& idGestureName);    void    PresetGestures();    DECLARE_WND_CLASS_EX(NULL, 0, -1)    BEGIN_MSG_MAP(CAdvRecoApp)    MESSAGE_HANDLER(WM_CREATE, OnCreate)    MESSAGE_HANDLER(WM_DESTROY, OnDestroy)    MESSAGE_HANDLER(WM_SIZE, OnSize)    COMMAND_ID_HANDLER(ID_RECOGNIZER_DEFAULT, OnRecognizer)    COMMAND_RANGE_HANDLER(ID_RECOGNIZER_FIRST, ID_RECOGNIZER_LAST, OnRecognizer)    COMMAND_ID_HANDLER(ID_INPUTSCOPE_COERCE, OnInputScopeCoerce)    COMMAND_RANGE_HANDLER(ID_INPUTSCOPE_FIRST, ID_INPUTSCOPE_LAST, OnInputScope)    COMMAND_ID_HANDLER(ID_GUIDE_NONE, OnGuide)    COMMAND_ID_HANDLER(ID_GUIDE_LINES, OnGuide)    COMMAND_ID_HANDLER(ID_GUIDE_BOXES, OnGuide)    COMMAND_ID_HANDLER(ID_MODE_INK, OnMode)    COMMAND_ID_HANDLER(ID_MODE_INK_AND_GESTURES, OnMode)    COMMAND_ID_HANDLER(ID_MODE_GESTURES, OnMode)    COMMAND_ID_HANDLER(ID_RECOGNIZE, OnRecognize)    COMMAND_ID_HANDLER(ID_CLEAR, OnClear)    COMMAND_ID_HANDLER(ID_EXIT, OnExit)    NOTIFY_HANDLER(mc_iSSGestLVId, LVN_COLUMNCLICK, OnLVColumnClick)    NOTIFY_HANDLER(mc_iMSGestLVId, LVN_COLUMNCLICK, OnLVColumnClick)    NOTIFY_HANDLER(mc_iSSGestLVId, LVN_ITEMCHANGING, OnLVItemChanging)    NOTIFY_HANDLER(mc_iMSGestLVId, LVN_ITEMCHANGING, OnLVItemChanging)END_MSG_MAP()public:    // 消息函数    LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);    LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);    LRESULT OnSetFocus(UINT, WPARAM, LPARAM, BOOL& bHandled);    LRESULT OnSize(UINT, WPARAM, LPARAM, BOOL& bHandled);    LRESULT OnLVColumnClick(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);    LRESULT OnLVItemChanging(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);        // 命令句柄    LRESULT OnRecognizer(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);    LRESULT OnInputScopeCoerce(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);    LRESULT OnInputScope(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);    LRESULT OnGuide(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);    LRESULT OnMode(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);    LRESULT OnRecognize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);    LRESULT OnClear(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);    LRESULT OnExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);    // 笔迹句柄    HRESULT OnStroke(IInkCursor* pIInkCursor, IInkStrokeDisp* pIInkStroke,                      VARIANT_BOOL* pbCancel);    HRESULT OnGesture(IInkCursor* pIInkCursor, IInkStrokes* pIInkStrokes,                       VARIANT vGestures, VARIANT_BOOL* pbCancel);    //识别器句柄    HRESULT OnRecognitionWithAlternates(IInkRecognitionResult* pIInkRecoResult,                                         VARIANT vCustomParam,                                        InkRecognitionStatus RecognitionStatus);};

 

 核心源文件的代码讲解

  1. #ifndef _WIN32_WINNT  
  2. #define _WIN32_WINNT 0x0500  
  3. #endif  
  4.   
  5.   
  6. #include <windows.h>  
  7. #include <commctrl.h>       //  com指针所需头文件  
  8.   
  9.   
  10.   
  11. #ifndef ListView_SetCheckState  
  12. #define ListView_SetCheckState(hwndLV, i, fCheck) /  
  13. ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK((fCheck ? 2 : 1)), LVIS_STATEIMAGEMASK)  
  14. #endif  
  15.   
  16. #ifndef ListView_GetCheckState  
  17. #define ListView_GetCheckState(hwndLV, i) /  
  18. ((((UINT)(SNDMSG((hwndLV), LVM_GETITEMSTATE, (WPARAM)(i), LVIS_STATEIMAGEMASK))) >> 12) -1)  
  19. #endif  
  20.   
  21. #ifndef MIIM_STRING  
  22. #define MIIM_STRING      0x00000040  
  23. #endif  
  24. #ifndef MIIM_FTYPE  
  25. #define MIIM_FTYPE       0x00000100  
  26. #endif  
  27.   
  28. // 定义数组容纳笔势  
  29. #define countof(array)  (sizeof(array)/sizeof(array[0]))  
  30.   
  31.   
  32. #include <atlbase.h>        /  
  33. CComModule _Module;  
  34. #include <atlwin.h>           
  35. #include <atlcom.h>          
  36.   
  37. // Tablet PC 头文件  
  38. #include <msinkaut.h>  
  39. #include <msinkaut_i.c>  
  40. #include <tpcerror.h>  
  41.   
  42.   
  43. #include "resource.h"         
  44. #include "EventSinks.h"      
  45. #include "ChildWnds.h"        
  46. #include "AdvReco.h"          
  47.   
  48.   
  49. //定义初始化变量  
  50. const LPOLESTR gc_pwsInputScopes[] = {  
  51.     L"(!IS_DEFAULT)",  
  52.     L"(!IS_URL)",  
  53.     L"(!IS_FILE_FULLFILEPATH)",  
  54.     L"(!IS_FILE_FILENAME)",  
  55.     L"(!IS_EMAIL_USERNAME)",  
  56.     L"(!IS_EMAIL_SMTPEMAILADDRESS)",  
  57.     L"(!IS_LOGINNAME)",  
  58.     L"(!IS_PERSONALNAME_FULLNAME)",  
  59.     L"(!IS_PERSONALNAME_PREFIX)",  
  60.     L"(!IS_PERSONALNAME_GIVENNAME)",  
  61.     L"(!IS_PERSONALNAME_MIDDLENAME)",  
  62.     L"(!IS_PERSONALNAME_SURNAME)",  
  63.     L"(!IS_PERSONALNAME_SUFFIX)",  
  64.     L"(!IS_ADDRESS_FULLPOSTALADDRESS)",  
  65.     L"(!IS_ADDRESS_POSTALCODE)",  
  66.     L"(!IS_ADDRESS_STREET)",  
  67.     L"(!IS_ADDRESS_STATEORPROVINCE)",  
  68.     L"(!IS_ADDRESS_CITY)",  
  69.     L"(!IS_ADDRESS_COUNTRYNAME)",  
  70.     L"(!IS_ADDRESS_COUNTRYSHORTNAME)",  
  71.     L"(!IS_CURRENCY_AMOUNTANDSYMBOL)",  
  72.     L"(!IS_CURRENCY_AMOUNT)",  
  73.     L"(!IS_DATE_FULLDATE)",  
  74.     L"(!IS_DATE_MONTH)",  
  75.     L"(!IS_DATE_DAY)",  
  76.     L"(!IS_DATE_YEAR)",  
  77.     L"(!IS_DATE_MONTHNAME)",  
  78.     L"(!IS_DATE_DAYNAME)",  
  79.     L"(!IS_DIGITS)",  
  80.     L"(!IS_NUMBER)",  
  81.     L"(!IS_ONECHAR)",  
  82.     L"(!IS_TELEPHONE_FULLTELEPHONENUMBER)",  
  83.     L"(!IS_TELEPHONE_COUNTRYCODE)",  
  84.     L"(!IS_TELEPHONE_AREACODE)",  
  85.     L"(!IS_TELEPHONE_LOCALNUMBER)",  
  86.     L"(!IS_TIME_FULLTIME)",  
  87.     L"(!IS_TIME_HOUR)",  
  88.     L"(!IS_TIME_MINORSEC)",  
  89.     L"((0|1|2|3|4|5|6|7|8|9) ?(0|1|2|3|4|5|6|7|8|9) ?(0|1|2|3|4|5|6|7|8|9) ?-? ?)?(0|1|2|3|4|5|6|7|8|9) ?(0|1|2|3|4|5|6|7|8|9) ?(0|1|2|3|4|5|6|7|8|9) ?-? ?(0|1|2|3|4|5|6|7|8|9) ?(0|1|2|3|4|5|6|7|8|9) ?(0|1|2|3|4|5|6|7|8|9) ?(0|1|2|3|4|5|6|7|8|9)",  
  90.     L"(!IS_PERSONALNAME_FULLNAME)|((!IS_PERSONALNAME_PREFIX)? +(!IS_PERSONALNAME_GIVENNAME)+ +(!IS_PERSONALNAME_MIDDLENAME)* +(!IS_PERSONALNAME_SURNAME)+)",  
  91.     L"MN(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(A|B)(!IS_DIGITS)(X|Y)((0|1)*)"  
  92. };  
  93.   
  94.   
  95. const LONG gc_lMaxInputScopeMenuItemLength = 40;  
  96.   
  97. // 定义笔势常量  
  98. const InkApplicationGesture gc_igtSingleStrokeGestures[] = {  
  99.     IAG_Scratchout, IAG_Triangle, IAG_Square, IAG_Star, IAG_Check,  
  100.     IAG_Circle, IAG_DoubleCircle, IAG_Curlicue, IAG_DoubleCurlicue,  
  101.     IAG_SemiCircleLeft, IAG_SemiCircleRight,  
  102.     IAG_ChevronUp, IAG_ChevronDown, IAG_ChevronLeft,  
  103.     IAG_ChevronRight, IAG_Up, IAG_Down, IAG_Left, IAG_Right, IAG_UpDown, IAG_DownUp,  
  104.     IAG_LeftRight, IAG_RightLeft, IAG_UpLeftLong, IAG_UpRightLong, IAG_DownLeftLong,  
  105.     IAG_DownRightLong, IAG_UpLeft, IAG_UpRight, IAG_DownLeft, IAG_DownRight, IAG_LeftUp,  
  106.     IAG_LeftDown, IAG_RightUp, IAG_RightDown, IAG_Tap  
  107. };  
  108.   
  109. const UINT gc_nRecommendedForMixedMode[] = {  
  110.         0 /*Scratchout*/, 3/*Star*/, 6/*Double Circle*/,  
  111.         7 /*Curlicue*/, 8 /*Double Curlicue*/, 25 /*Down-Left Long*/ };  
  112.   
  113. const InkApplicationGesture gc_igtMultiStrokeGestures[] = {  
  114.     IAG_ArrowUp, IAG_ArrowDown, IAG_ArrowLeft,  
  115.     IAG_ArrowRight, IAG_Exclamation, IAG_DoubleTap  
  116. };  
  117.   
  118.   
  119. const _ATL_FUNC_INFO IInkRecognitionEventsImpl<CAdvRecoApp>::mc_AtlFuncInfo =  
  120.         {CC_STDCALL, VT_EMPTY, 3, {VT_UNKNOWN, VT_VARIANT, VT_I4}};  
  121.   
  122. const _ATL_FUNC_INFO IInkCollectorEventsImpl<CAdvRecoApp>::mc_AtlFuncInfo[2] = {  
  123.         {CC_STDCALL, VT_EMPTY, 3, {VT_UNKNOWN, VT_UNKNOWN, VT_BOOL|VT_BYREF}},  
  124.         {CC_STDCALL, VT_EMPTY, 4, {VT_UNKNOWN, VT_UNKNOWN, VT_VARIANT, VT_BOOL|VT_BYREF}}  
  125. };  
  126.   
  127. const TCHAR gc_szAppName[] = TEXT("优快云专家尹成的程序,http://blog.youkuaiyun.com/yincheng01");  
  128.   
  129. //程序初始化窗口  
  130. int APIENTRY WinMain(  
  131.         HINSTANCE hInstance,  
  132.         HINSTANCE /*hPrevInstance*/,   // not used here  
  133.         LPSTR     /*lpCmdLine*/,       // not used here  
  134.         int       nCmdShow  
  135.         )  
  136. {  
  137.     int iRet = 0;  
  138.   
  139.     // 初始化COM  
  140.     if (S_OK == ::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED))  
  141.     {  
  142.         _Module.Init(NULL, hInstance);  
  143.   
  144.         // 注册空间窗口  
  145.         INITCOMMONCONTROLSEX icc;  
  146.    

    给我老师的人工智能教程打call!http://blog.youkuaiyun.com/jiangjunshow
    这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值