GDI+学习笔记之GDI+环境初始化
2010-12-08 17:58
507 查看
作者:朱金灿
来源:http://blog.csdn.net/clever101/
尽管以前接触过一下GDI+,但决心从现在开始系统学习GDI+,所用的教材为《精通GDI编程》。在VS 2010以下版本的VS 编译器使用GDI+都需要对GDI+环境进行初始化操作(VS 2010中的MFC 10依赖GDI+,故不用初始化)。
VS 2003、VS 2005和VS 2008的GDI+环境初始化操作步骤一样。
在应用程序类添加一个保护权限的数据成员:
在应用程序类的实现文件包含gdi+的头文件:
在工程附加库加上:GdiPlus.lib
然后在应用程序类的InitInstance加上下面初始化代码:
上面代码的作用是初始化GDI+资源。
在应用程序类的InitInstance加上下面代码:
上面代码的作用是销毁GDI+资源。
VC 6.0中使用GDI+库,请参考这篇文章:在VC6.0中使用GDI+的两种办法
现在测试一下我们初始化GDI+环境是否成功。我们使用GDI+的类接口在视图客户区绘制一个字符串,具体代码如下:
效果图如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/10/3601ff1e00b43889ad9fc5736fbc2eb5.jpg)
使用GDI+一些注意事项:
1.在DLL中使用GDI+库,只需要包含GdiPlus.h和GdiPlus.lib,初始化GDI+环境的工作只需要在主调用程序做,否则在DLL初始化代码中初始化GDI+环境容易发生DLL重入的错误(以前我犯过这样的错误)。
2.GDI+接口参数使用的是unicode字符集,因为调用任何GDI+类接口时其字符串参数都必须确保是unicode字符。在多字节字符集环境下开发常量字符串可以通过L宏转换,变量多字节字符转unicode字符可以使用Windows API函数MultiByteToWideChar或ATL的A2W宏。
3. GDI+的对象和GDI句柄一样,同样会占用资源,一次使用过多的GDI+的对象甚至会发生程序崩溃的现象。因此必须随时将不必要的GDI+的对象占用的资源释放掉,如上例的:graphics.ReleaseHDC(pDC->m_hDC)。
来源:http://blog.csdn.net/clever101/
尽管以前接触过一下GDI+,但决心从现在开始系统学习GDI+,所用的教材为《精通GDI编程》。在VS 2010以下版本的VS 编译器使用GDI+都需要对GDI+环境进行初始化操作(VS 2010中的MFC 10依赖GDI+,故不用初始化)。
VS 2003、VS 2005和VS 2008的GDI+环境初始化操作步骤一样。
在应用程序类添加一个保护权限的数据成员:
ULONG_PTR m_gdiplusToken;
在应用程序类的实现文件包含gdi+的头文件:
#include <GdiPlus.h>
在工程附加库加上:GdiPlus.lib
然后在应用程序类的InitInstance加上下面初始化代码:
BOOL C***App::InitInstance() { Gdiplus::GdiplusStartupInput StartupInput; GdiplusStartup(&m_gdiplusToken,&StartupInput,NULL); }
上面代码的作用是初始化GDI+资源。
在应用程序类的InitInstance加上下面代码:
int C***App::ExitInstance() { // TODO: 在此添加专用代码和/或调用基类 Gdiplus::GdiplusShutdown(m_gdiplusToken); return __super::ExitInstance(); }
上面代码的作用是销毁GDI+资源。
VC 6.0中使用GDI+库,请参考这篇文章:在VC6.0中使用GDI+的两种办法
现在测试一下我们初始化GDI+环境是否成功。我们使用GDI+的类接口在视图客户区绘制一个字符串,具体代码如下:
CDC *pDC = pView->GetDC(); Gdiplus::Graphics graphics(pDC->m_hDC); Gdiplus::Pen pen(Gdiplus::Color(255,0,0,255)); Gdiplus::SolidBrush brush(Gdiplus::Color(255,0,0,255)); Gdiplus::FontFamily fontfm(L"宋体"); Gdiplus::Font font(&fontfm,24,Gdiplus::FontStyleRegular,Gdiplus::UnitPixel); CRect rt; pView->GetClientRect(&rt); Gdiplus::PointF pointF(rt.Width()/2,rt.Height()/2); graphics.DrawString(L"GDI+程序示意",-1,&font,pointF,&brush); graphics.ReleaseHDC(pDC->m_hDC); pView->ReleaseDC(pDC);
效果图如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/10/3601ff1e00b43889ad9fc5736fbc2eb5.jpg)
使用GDI+一些注意事项:
1.在DLL中使用GDI+库,只需要包含GdiPlus.h和GdiPlus.lib,初始化GDI+环境的工作只需要在主调用程序做,否则在DLL初始化代码中初始化GDI+环境容易发生DLL重入的错误(以前我犯过这样的错误)。
2.GDI+接口参数使用的是unicode字符集,因为调用任何GDI+类接口时其字符串参数都必须确保是unicode字符。在多字节字符集环境下开发常量字符串可以通过L宏转换,变量多字节字符转unicode字符可以使用Windows API函数MultiByteToWideChar或ATL的A2W宏。
3. GDI+的对象和GDI句柄一样,同样会占用资源,一次使用过多的GDI+的对象甚至会发生程序崩溃的现象。因此必须随时将不必要的GDI+的对象占用的资源释放掉,如上例的:graphics.ReleaseHDC(pDC->m_hDC)。
相关文章推荐
- GDI+学习笔记之GDI+环境初始化
- GDI+学习笔记之GDI+环境初始化
- GDI+学习笔记之GDI+环境初始化
- GDI+学习笔记之GDI+环境初始化
- GDI+学习笔记5-设备环境DC的概念
- 学习altas笔记[客户端JS和Altas环境初始化关系和DataTable返回数据的客户端处理]
- 学习altas笔记[客户端JS和Altas环境初始化关系和DataTable返回数据的客户端处理]
- 学习altas笔记[客户端JS和Altas环境初始化关系和DataTable返回数据的客户端处理]
- 嵌入式学习笔记4-C语言环境初始化
- 操作系统学习笔记(27)--初始化中断
- 【OpenGL 学习笔记】Nehe OpenGL + Visual Studio 2015 环境配置+ vs编译基础
- Django学习笔记1——win10下安装pip与python环境【django环境部署I】
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
- Tensorflow语法学习笔记(一):变量:创建、初始化、保存和加载
- 【C++ Primer学习笔记】构造函数初始化与赋值
- go 学习笔记 - sublime text 环境配置
- 学习笔记----编译搭建lnmp环境
- Wabacus学习笔记(一) 下载与环境搭建
- STARTUPINFO 结构初始化 学习笔记
- Objective-C 学习笔记 - part 3 - 为对象分配内存并初始化