基于Visual C++2010与windows SDK fo windows7开发windows7平台的tabletpc应用(1)-汉字手写轨迹输入
搭建好Visual C++2010与windows SDK fo windows7的开发平台以后,
小试牛刀,检验下开发windows7的下的tabletpc应用,
代码注释如下
#include <windows.h> #include <comdef.h> #include <msinkaut.h> #include <msinkaut_i.c> //包含windows SDK for windows7的核心tabletpc头文件 #include "resource.h" const TCHAR* gc_szAppName = TEXT("Basic Recognition"); // 建立轨迹指针,识别指针,轨迹画板指针 IInkCollector * g_pIInkCollector = NULL; IInkDisp * g_pIInkDisp = NULL; IInkRecognizerContext * g_pIInkRecoContext = NULL; / // //清除Com指针 / void CleanUp() // Release all objects { if (g_pIInkRecoContext != NULL) { g_pIInkRecoContext->Release(); g_pIInkRecoContext = NULL; } if (g_pIInkDisp != NULL) { g_pIInkDisp->Release(); g_pIInkDisp = NULL; } if (g_pIInkCollector != NULL) { g_pIInkCollector->Release(); g_pIInkCollector = NULL; } } windows窗口消息循环 LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: { //窗口消息创建,注册窗口,并创建com指针接口 HRESULT hr; hr = CoCreateInstance(CLSID_InkRecognizerContext, NULL, CLSCTX_INPROC_SERVER, IID_IInkRecognizerContext, (void **) &g_pIInkRecoContext); if (FAILED(hr)) { return -1; } hr = CoCreateInstance(CLSID_InkCollector, NULL, CLSCTX_INPROC_SERVER, IID_IInkCollector, (void **) &g_pIInkCollector); if (FAILED(hr)) return -1; hr = g_pIInkCollector->get_Ink(&g_pIInkDisp); if (FAILED(hr)) return -1; hr = g_pIInkCollector->put_hWnd((long)hwnd); if (FAILED(hr)) return -1; hr = g_pIInkCollector->put_Enabled(VARIANT_TRUE); if (FAILED(hr)) return -1; break; } case WM_DESTROY: //退出消息循环,结束程序 PostQuitMessage(0); break; case WM_COMMAND: //清除轨迹 if (wParam == ID_CLEAR) { g_pIInkDisp->DeleteStrokes(0); InvalidateRect(hwnd, NULL, TRUE); } else if (wParam == ID_RECOGNIZE) { //获取识别结果,并显示最优化识别结果 HCURSOR hCursor = ::SetCursor(::LoadCursor(NULL, IDC_WAIT)); //获取轨迹指针用于识别 IInkStrokes* pIInkStrokes = NULL; HRESULT hr = g_pIInkDisp->get_Strokes(&pIInkStrokes); if (SUCCEEDED(hr)) { hr = g_pIInkRecoContext->putref_Strokes(pIInkStrokes); if (SUCCEEDED(hr)) { //利用识别指针获取识别结果 IInkRecognitionResult* pIInkRecoResult = NULL; InkRecognitionStatus RecognitionStatus; hr = g_pIInkRecoContext->Recognize(&RecognitionStatus, &pIInkRecoResult); if (SUCCEEDED(hr) && (pIInkRecoResult!= NULL)) { BSTR bstrBestResult = NULL; hr = pIInkRecoResult->get_TopString(&bstrBestResult); pIInkRecoResult->Release(); pIInkRecoResult = NULL; if (SUCCEEDED(hr) && bstrBestResult) { MessageBoxW(hwnd, bstrBestResult, L"识别结果", MB_OK); SysFreeString(bstrBestResult); } } g_pIInkRecoContext->putref_Strokes(NULL); } pIInkStrokes->Release(); } ::SetCursor(hCursor); } else { return DefWindowProc(hwnd, uMsg, wParam, lParam); } break; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return 0; } //注册windows 窗口类名 BOOL RegisterWindowClass(HINSTANCE hInstance) { WNDCLASSEX WndClassEx; WndClassEx.cbSize = sizeof(WndClassEx); WndClassEx.style = CS_HREDRAW | CS_VREDRAW; WndClassEx.lpfnWndProc = WndProc; WndClassEx.cbClsExtra = 0; WndClassEx.cbWndExtra = 0; WndClassEx.hInstance = hInstance; WndClassEx.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON)); WndClassEx.hIconSm = WndClassEx.hIcon; WndClassEx.hCursor = LoadCursor(NULL, IDC_ARROW); WndClassEx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); WndClassEx.lpszMenuName = MAKEINTRESOURCE(IDR_MENU); WndClassEx.lpszClassName = gc_szAppName; if (!RegisterClassEx(&WndClassEx)) { return false; } return true; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE , LPSTR , int nCmdShow) { if (!RegisterWindowClass(hInstance)) return 0; CoInitialize(NULL); //创建窗口 HWND hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, gc_szAppName, gc_szAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if (NULL == hWnd) { return 0; } // 显示窗口 ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // 开始消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } CleanUp(); CoUninitialize(); return msg.wParam; }
VS2010启动界面
VS2010项目开发
程序界面,以及轨迹
轨迹识别结果
清除笔迹
需要源代码的请留言留下Email,我给大家发
本文作者专著《Visual C++2010开发权威指南》即将推出,敬请关注,Visual C++2010最近技术,Windows7开发最新技术!
基于Visual C++2010与windows SDK fo windows7开发windows7平台的tabletpc应用(1)-汉字手写轨迹输入相关推荐
- 基于Visual C++2010与windows SDK fo windows7开发windows7平台的tabletpc应用(1)-手写数学公式输入...
搭建好Visual C++2010与windows SDK fo windows7的开发平台以后, 小试牛刀,检验下开发windows7的下的tabletpc应用,这个东西财务记账比较多, 大家先看效 ...
- 基于Visual C++2010与windows SDK fo windows7开发Windows 7的多点触摸特性应用程序(1)
2008年5月28日,微软即将退休的精神领袖比尔·盖茨和首席执行官史蒂夫·鲍尔默共同在北圣地亚哥四季艾维亚拉洲际度假村举办的2008 D6 All Things数字化大会上向到场的嘉宾展示了windo ...
- 基于声网的音视频SDK和FreeSWITCH开发WebRTC2SIP Gateway 方案和思路
为什么做这个? 今年初接到一个项目任务,客户要求在自己的音视频平台系统中集成webrtc功能(原系统是基于SIP协议开发的,已经稳定运行多年,有很多客户).在比对了多家RTC产品的效果后,.他们对声网 ...
- 计算道路超高lisp_基于Visual LISP的地铁轨道综合图辅助设计程序开发
基于Visual LISP的地铁轨道综合图辅助设计程序开发 基于Visual LISP的地铁轨道综合图辅助设计程序开发 吴凯伟,石玮荃 (中铁工程设计咨询集团有限公司,北京 100055) 摘 要:为 ...
- Kinect for Windows SDK v2.0 开发笔记 (十) 高清面部帧(1) FACS 介绍
转载于:https://blog.csdn.net/dustpg/article/details/38892783 使用SDK: Kinect for Windows SDK v2.0 public ...
- matlab为什么要升维数,基于MATLAB和升维投影法的手写字符识别输入系统
256 现代交际·2019年6期 作者简介:王思达,长春师范大学学生,研究方向:计算机科学与技术:刘勇,长春师范大学学生,研究方向:计算机科学与技术:袁汇灵, 长春师范大学学生,研究方向:计算机科学与 ...
- FOC 无感 代码 算法 电机控制 PMSM 基于中颍SH32F2601的洗衣机量产无感bldc控制方案,电机控制算法完全手写
FOC 无感 代码 算法 电机控制 PMSM 基于中颍SH32F2601的洗衣机量产无感bldc控制方案,电机控制算法完全手写,MCU寄存器配置完全手写,未用到任何库文件 ID:34500065518 ...
- 基于Visua C++2010 与 Windows 7 SDK开发windows7 Shell应用(1)-搜索文件夹
windows7 shell 就是windows7操作系统的的控制台 对于熟悉了命令行的人而言,用键盘调用程序比鼠标更快更省力 您可以用"Shell:"命令调用一切可以用资源管理器 ...
- 基于Visual C 2010开发Windows7应用 多点触摸图片处理应用程序 1 同时处理多张图片
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! wind ...
- 基于Visual C#2010开发Windows7应用 多点触摸图片处理应用程序(1)-同时处理多张图片...
windows7的触摸功能开辟了一个电脑的全新世纪.从此,您可以丢掉鼠标和键盘,直接用手在屏幕上玩游戏.用笔来写字编辑文档,聊天. windows7最重要特性之一就是:支持多点触摸.比尔盖茨说,不久, ...
最新文章
- iOS手势之pinch
- [转载] 七龙珠第一部——第034话 红缎带军团
- StarUML 逆向工程插件加载失败问题解决
- 跑linux编译什么CPU速度快,linux 加快编译速度
- 灰度拉伸python_灰度变换之灰度线性拉伸(算法1)
- centos7修改命令行或图形界面启动模式
- OEL修改字符集失败 -bash: /root: is a directory
- Android期末复习题库
- cad断点快捷键_cad打断快捷键(cad十字路口路口怎么画)
- 尚硅谷JAVA基础笔记吐血整理
- Java中常见常用的类
- 光纤跳线的分类和概述
- Windows API串口编程详解
- 信息化时代,,生产制造管理系统该具备哪些功能?
- 半监督语义分割_paper reading part2
- ERROR 1010 (HY000): Error dropping database (can't rmdir './library', errno:
- [OHIF-Viewers]医疗数字阅片-医学影像-React/Redux 的好帮手Classnames
- 互联网日报 | 3月23日 星期二 | 京东集团8亿美元增持达达集团;阿里云盘正式启动公测;快手进军二手电商...
- HTML+CSS+JS个人网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计
- sharding-jdbc(ShardingSphere )、mycat、DRDS 三个分布式数据库中间件的简单介绍(纯理论说明)