C++ GDI+环境的初始化

注:如果包含<gdiplus.h> 后出现编译错误,那么看看stdafx.h中有没有定义WIN32_LEAN_AND_MEAN,有的话注释掉就OK

【1】添加文件头与库

#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib, "GdiPlus.lib")


【2】添加有效成员(保证使用gdi+的地方都有效)

ULONG_PTR m_gdiplusToken;

【3】初始化gdi+资源(使用gdi+之前)

Gdiplus::GdiplusStartupInput StartupInput;  
GdiplusStartup(&m_gdiplusToken,&StartupInput,NULL);   


【4】销毁gdi+资源(使用gdi+之后)

Gdiplus::GdiplusShutdown(m_gdiplusToken);  

【5】测试示例(初始化与销毁工作已经放到应用程序的初始化与退出中)

Gdiplus::Graphics   graphics(hDC);
Gdiplus::SolidBrush solidBrush(Gdiplus::Color::Red); 
Gdiplus::FontFamily fontFamily(L"宋体");
Gdiplus::Font	    font(&fontFamily, 16, FontStyleRegular, UnitPoint);

graphics.DrawString(L"GDI+程序示意", -1, &font, Gdiplus::PointF(0, 0), &solidBrush);	
graphics.ReleaseHDC(hDC);


【6】为了方便使用,将初始化代码和销毁代码放到一个类中,使用时只需要定义这个类的一个global实例就可以了 (如果使用gdi+的地方比较多,建议将初始化放到主应用程序的初始化中,提高效率,而不是api中

class GdiPlusIniter{
public:
      GdiPlusIniter(){
          Gdiplus::GdiplusStartupInput StartupInput;  
          GdiplusStartup(&m_gdiplusToken,&StartupInput,NULL); 
      }
  
      ~GdiPlusIniter(){
          Gdiplus::GdiplusShutdown(m_gdiplusToken);
    }
private:
     ULONG_PTR m_gdiplusToken;
 };

在DLL中使用GDI+库,只需要包含GdiPlus.h和GdiPlus.lib,初始化GDI+环境的工作只需要在主调用程序做,否则在DLL初始化代码中初始化GDI+环境容易发生DLL重入的错误,而且频繁的切换效率低。


参考文章:

http://www.cnblogs.com/hdtianfu/archive/2013/05/10/3071479.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郎涯技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值