由于近段时间使用和学习了GDI+和页面旋转,特将查询到资料总结如下。
GDI+介绍
GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用GDI+,因为GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功能。
作为图形设备接口的GDI+使得应用程序开发人员在输出屏幕和打印机信息的时候无需考虑具体显示设备的细节,他们只需调用GDI+库输出的类的一些方法即可完成图形操作,真正的绘图工作由这些方法交给特定的设备驱动程序来完成,GDI+使得图形硬件和应用程序相互隔离.从而使开发人员编写设备无关的应用程序变得非常容易。
一、GDI+使用
1、下载安装GDI+使用到的文件www.codeguru.com/code/legacy/gdi/gdiplus.zip
2、在stdafx.h头文件中包含GDI+使用到的文件和库
#include "GDIPlus\includes\gdiplus.h" 请修改为你的头文件路径
using namespace Gdiplus;
#pragma comment(lib, "GDIPlus\\lib\\GdiPlus.lib") 请修改为你的.lib文件路径
//(说明:网上有很多种包含GDI方法,本人觉得使用相对路径会方便些。在源码同一路径下新建文件夹GDIPlus,并将下载的压缩包放至此文件夹中)
3、初始化GDI+环境
1)在构造函数或其他函数增加如下初始代码
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
我的程序是在view中int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct) 中初始化
2)在虚构函数或其他函数释放资源
GdiplusShutdown(m_gdiplusToken);
4、使用GDI+进行操作(在View OnDraw()函数使用)
1)定义对象
Graphics g(pDC-> m_hDC);
g.SetSmoothingMode(SmoothingModeAntiAlias); //属性设置
2)使用Graphics对象来进行绘制
DrawEllipse | Overloaded. Draws an ellipse. |
DrawImage | Overloaded. Draws an image. |
DrawLine | Overloaded. Draws a line. |
DrawLines | Overloaded. Draws a sequence of connected lines. |
(具体参数和用法参考MSDN即可)
二、Matrix页面旋转
1、定义Matrix对象
Matrix matrix(1.0f,0.0f,0.0f,1.0f,0.0f,0.0f); //参数有意义,不同的参数代表不同意义
2、页面旋转
matrix.RotateAt(90,PointF(wid[0],len[0]),MatrixOrderAppend);//90代表旋转度数
matrix.Translate(-len[0],wid[0]-len[0],MatrixOrderAppend);//移动的值根据旋转度数不同,需移动值也不同,具体计算参照下一点的说明
3、页面旋转原理
页面旋转的原理很简单,我个人是这样做的:按照页面右下角坐标为原点(右下角是个人爱好,也可以为其他坐标,方便计算即可),然后再根据旋转后的位置移动在目标位置(这个过程的计算就相对容易)。之前一直苦苦寻找页面旋转点的中心,吃力又不讨好。
三、使用GDI+和Matrix
在前面对GDI+和Matrix的基础上,只需
g->SetTransform(&matrix);
参考资料:
http://blog.csdn.net/huntjap/article/details/240960
http://blog.csdn.net/zhangsongshan/article/details/4789845
http://www.vckbase.com/document/viewdoc/?id=1745
http://www.360doc.com/content/09/0821/11/197414_5104514.shtml