您的位置:首页 > 其它

陈灯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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: