使用com组件快速实现批注功能
2016-06-28 17:55
477 查看
使用com组件快速实现批注功能
一、组件简介
通常情况下想要做出一个还看得过去批注可不是一件容易的事,渲染效率,笔记的连贯、圆滑都不是一件容易做到的事情。但是windows提供了一个com组件可以让你轻易的在程序里获得一个优秀的批注。windows的批注组件涉及到两个com组件,接口都包含在头文件里rtscom.h
两个组件分别是RealTimeStylus和DynamicRenderer,从名字上可以看出一个是笔迹,一个是渲染器。
二、使用流程简介
要进行批注首先要有一个窗口,然后将创建一个RealTimeStylus对象并附加到窗口上去,此时RealTimeStylus对象就已经赋予了这个窗口用鼠标进行批注的功能,但是还需要将批注显示出来,这就需要另一个对象—DynamicRenderer,这是用来渲染笔迹的渲染器。将DynamicRenderer对象和RealTimeStylus对象关联起来,就可以开始批注了,RealTimeStylus对象负责处理批注笔迹的数据,DynamicRenderer对象负责把这些笔迹渲染出来,当然有一些选项可以让你对笔迹和渲染做一些设置,后面会讲到三、使用详解
首先要包含rtscom.h头文件,这是com对象,初始化com环境,这就不细讲了。笔迹对象的建立与附加
接着使用GUID创建对象然后附加到接收鼠标事件的窗口句柄上
IRealTimeStylus* m_pRealTimeStylus; CoCreateInstance(CLSID_RealTimeStylus, NULL, CLSCTX_ALL, IID_PPV_ARGS(&m_pRealTimeStylus)); m_pRealTimeStylus->put_HWND((HANDLE_PTR)hwnd);
渲染对象的建立与附加
使用GUID创建对象然后附加到要渲染的窗口句柄上,注意这里批注的窗口和渲染的窗口可以不同,但是渲染的大小是按照批注窗口的大小来渲染的
IDynamicRenderer* m_pDynamicRenderer; CoCreateInstance(CLSID_DynamicRenderer, NULL, CLSCTX_ALL, IID_PPV_ARGS(&m_pDynamicRenderer)); m_pDynamicRenderer->put_HWND((HANDLE_PTR)hwnd);
关联笔记对象和渲染对象,这两个对象之间的关联是通过一个插件接口实现的
IStylusSyncPlugin* pStylusSyncPlugin = NULL; m_pDynamicRenderer->QueryInterface(&pStylusSyncPlugin); m_pRealTimeStylus->AddStylusSyncPlugin(0, pStylusSyncPlugin); m_pRealTimeStylus->put_Enabled(TRUE); pStylusSyncPlugin->Release(); m_pDynamicRenderer->put_Enabled(TRUE);
IStylusSyncPlugin顾名思义是同步笔迹插件,有同步自然就有异步,这里只讲同步。使用完后遵循com对象的使用原则调用release将引用计数减1.
设置笔迹渲染的粗细与颜色
COLORREF color; IInkDrawingAttributes* pDrawingAttributesDynamicRenderer; m_pDynamicRenderer->get_DrawingAttributes(&pDrawingAttributesDynamicRenderer); pDrawingAttributesDynamicRenderer->put_Color(color); pDrawingAttributesDynamicRenderer->put_Width(200); pDrawingAttributesDynamicRenderer->Release();
我也不知道宽度的单位是什么只能看效果再调整,200是我认为比较舒服的一个值。
设置渲染缓存,设置缓存通常是必须的,不然的话每次渲染只渲染一笔,之前的笔迹全没了,当然如果你就是要这种效果就当我没说
m_pDynamicRenderer->put_DataCacheEnabled(true);
渲染以及重画,渲染是再每次进行批注后自动的,但是当窗口的内容刷新(例如处理WM_PAINT后)以后批注笔迹就会消失,此时需要重绘,使用Draw并传入DC来重绘笔迹内容。
m_pDynamicRenderer->Draw(reinterpret_cast<HANDLE_PTR>(hdc));
四、总结
此篇文章只是对windows的批注对象做一个基本的入门介绍,我自己对此方面内容也只是浅尝辄止,还有很多高级的用法和选项,例如多点触控、获取笔迹数据等,具体可以再微软的官方实例和msdn中查询。如有发现错误的地方,欢迎指正。如果有什么疑问也希望大家多多交流。
相关文章推荐
- 如何重装TCP/IP协议
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- 使用Windows原生命令一键清空剪贴板
- windows用windeployqt发布qt quick application程序
- 利用开源软件打造自己的全功能远程工具
- Windows 8虚拟机不能全屏的解决方法
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- 微软镜像下载
- windows server域用户提升到本地更高权限组中的方法
- 使用命令修改注册表键值及权限