陈灯WGF工作内容及特点
2008-08-01 18:41
183 查看
1
工作内容
WGF通过一个导出类CDBDraw实现了对双缓冲绘图的封装和优化。CDBDraw是一个非常简单的类,其只有3个导出的公有成员函数供外部进行调用,分别是初始化成员函数(init())、绘图成员函数(draw())和设置绘图区大小的成员函数(setRect())。这3个函数都是采用的__stdcall函数调用约定,关于这些函数的详细说明请参考源码中的注释,对于这些函数的使用方法请参考例程RobotField2D。CDBDraw类实现了对双缓冲绘图的隐藏,其在内部提供了保护类型的成员变量m_pDC和m_pGC分别用于gdi绘图和gdiplus绘图使用(m_pDC为一个CDC类对象,m_pGC为一个Graphics类对象)。在使用m_pDC和m_pGC进行绘图时,图形实际上是被绘制在后备缓冲区中,但是CDBDraw类隐藏了双缓冲绘图中内存拷贝的细节以及对绘图过程中的各类资源的释放都CDBDraw类进行了处理,用户可以不用担心内存泄漏等问题。同时,CDBDraw类在接口成员函数Draw()中对静态场景和动态场景进行了处理以提高绘图的性能。CDBDraw类中Draw()成员函数的执行流程见图1 。
图1 绘图接口流程
2
a)
轻量级库
WGF仅由一个导出类CDBDraw和一个非导出类CMemDC组成,属于轻量级的库。
b)
易于使用
WGF以动态链接库的形式提供,可以方便的被其他的语言使用。
c)
封装了双缓冲绘图细节
WGF封装了双缓冲绘图的细节,用户只需要使用CDBDraw类中提供的成员变量m_pDC和m_pGC进行绘图,至于与双缓冲有关的内存拷贝和各类资源的释放等细节均由框架完成。
d)
封装了gdiplus绘图的额外工作并为gdi和gdiplus混合绘图提供了便利
在vc6.0使用gdiplus进行绘图时需要进行一系列的额外工作,包括包含头文件、导入库文件和gdiplus的启动(GdiplusStartup())和关闭(GdiplusShutdown())等。WGF对gdiplus的这些工作进行了封装,使用WGF并不需要进行gdiplus的任何配置即可直接进行gdiplus绘图。同时,CDBDraw类中提供的m_pDC和m_pGC为gdi和gdiplus混合绘图提供了便利。
e)
高效性
WGF对静态场景和动态场景采用了不同的处理方式并通过gdi和gdiplus混合编程解决了gdiplus中低效的内存拷贝问题,使得采用WGF进行绘图的效率得以提升。效率的提升通过一个简单的试验可见一斑,即将drawStaticScene()虚函数中的绘图代码拷贝到drawDynamicScene()虚函数中,通过这一过程的前后对比发现拷贝后绘图程序的CPU占用率明显上升。
WGF源码及文档下载地址:
地址1:http://download.csdn.net/source/565974
地址2:http://cn.ziddu.com/download/214065/WGF.rar.html
工作内容
WGF通过一个导出类CDBDraw实现了对双缓冲绘图的封装和优化。CDBDraw是一个非常简单的类,其只有3个导出的公有成员函数供外部进行调用,分别是初始化成员函数(init())、绘图成员函数(draw())和设置绘图区大小的成员函数(setRect())。这3个函数都是采用的__stdcall函数调用约定,关于这些函数的详细说明请参考源码中的注释,对于这些函数的使用方法请参考例程RobotField2D。CDBDraw类实现了对双缓冲绘图的隐藏,其在内部提供了保护类型的成员变量m_pDC和m_pGC分别用于gdi绘图和gdiplus绘图使用(m_pDC为一个CDC类对象,m_pGC为一个Graphics类对象)。在使用m_pDC和m_pGC进行绘图时,图形实际上是被绘制在后备缓冲区中,但是CDBDraw类隐藏了双缓冲绘图中内存拷贝的细节以及对绘图过程中的各类资源的释放都CDBDraw类进行了处理,用户可以不用担心内存泄漏等问题。同时,CDBDraw类在接口成员函数Draw()中对静态场景和动态场景进行了处理以提高绘图的性能。CDBDraw类中Draw()成员函数的执行流程见图1 。
图1 绘图接口流程
2
特点
a)轻量级库
WGF仅由一个导出类CDBDraw和一个非导出类CMemDC组成,属于轻量级的库。
b)
易于使用
WGF以动态链接库的形式提供,可以方便的被其他的语言使用。
c)
封装了双缓冲绘图细节
WGF封装了双缓冲绘图的细节,用户只需要使用CDBDraw类中提供的成员变量m_pDC和m_pGC进行绘图,至于与双缓冲有关的内存拷贝和各类资源的释放等细节均由框架完成。
d)
封装了gdiplus绘图的额外工作并为gdi和gdiplus混合绘图提供了便利
在vc6.0使用gdiplus进行绘图时需要进行一系列的额外工作,包括包含头文件、导入库文件和gdiplus的启动(GdiplusStartup())和关闭(GdiplusShutdown())等。WGF对gdiplus的这些工作进行了封装,使用WGF并不需要进行gdiplus的任何配置即可直接进行gdiplus绘图。同时,CDBDraw类中提供的m_pDC和m_pGC为gdi和gdiplus混合绘图提供了便利。
e)
高效性
WGF对静态场景和动态场景采用了不同的处理方式并通过gdi和gdiplus混合编程解决了gdiplus中低效的内存拷贝问题,使得采用WGF进行绘图的效率得以提升。效率的提升通过一个简单的试验可见一斑,即将drawStaticScene()虚函数中的绘图代码拷贝到drawDynamicScene()虚函数中,通过这一过程的前后对比发现拷贝后绘图程序的CPU占用率明显上升。
WGF源码及文档下载地址:
地址1:http://download.csdn.net/source/565974
地址2:http://cn.ziddu.com/download/214065/WGF.rar.html
相关文章推荐
- JSP页面的内容、特点和工作机制
- 交互设计师的定义、特点、对交…的要求、工作内容、工作方法
- 管理工作的内容、本质与特点
- 陈灯WGF工作内容及特点
- 将 GridView 中的内容导出到 Excel 中多个工作表(Sheet) 的方法
- 过滤器:自清洗过滤器工作原理及特点阐述
- DBA日常工作内容和职责
- 对今天下午的工作内容的反思
- bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
- 跟着鬼哥学爬虫-4-根据需求爬工作需要内容
- 说说 Google 软件测试开发工程师的工作内容
- Linux下的目录及其操作命令(三、改变工作目录和显示目录内容的命令)
- 工作内容
- 技术支持工作内容
- 【面试】【项目】问答_工作内容问答
- 撤销工作区的内容&撤销暂存区的内容
- 分享自己的工作内容及数据库相关概念
- 知识工作的流程特点
- 产品经理职责和工作内容
- Oracle DBA日常工作内容