GDI 是 Graphics Device Interface 的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。

GDI Plus 是 Windows XP 中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI Plus 是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的 GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用 GDI Plus,因为 GDI Plus 对以前的Windows版本中 GDI 进行了优化,并添加了许多新的功能。

GDI Plus 虽然是一种过时的技术,但是使用起来非常繁琐,在这里把使用步骤和基本用法记录下来,方便以后查阅并供后人参考。

使用 GDI Plus 库的步骤:

  1. 引用GdiPlus头文件,导入Gdiplus命名空间,导入命名空间后引用Gdiplus命名空间的函数更加方便。

    #include <GdiPlus.h>        // GDI Plus
    using namespace Gdiplus;
  2. 链接 Gdiplus.lib 静态库,在VS中有两种方法,一种是直接在项目属性->链接->输入中填入 Gdiplus.lib ;二是直接使用编译器原语:`#pragma comment(lib, "Gdiplus.lib") 。在这里对64位和32位lib进行区分。

    #ifdef _WIN64
    #pragma comment(lib, ".\\Libs\\x64\\GdiPlus.lib")
    #else
    #pragma comment(lib, ".\\Libs\\x86\\GdiPlus.lib")
  3. 在调用任何 GDI Plus 函数前一定要调用 GDI Plus 库初始化函数 GdiplusStartup() ,初始化 GDI Plus 库。

    // GDI Plus Token(需要保存,释放时再次使用)
    ULONG_PTR m_pGdiToken = 0;
    
    // 装载 GDI Plus
    GdiplusStartupInput gdiplusStartupInput;
    GdiplusStartup(&m_pGdiToken, &gdiplusStartupInput, NULL);
  4. 在确定不需要使用任何GDI Plus函数并且所有GDI+对象均已销毁(变量超过了生存期)后,需要调用 GDI Plus 关闭函数 GdiplusShutdown() 。GDI Plus 支持多线程,所以可以在任意一个线程中调用。

    // 卸载GDI Plus
    GdiplusShutdown(m_pGdiToken);
  • 最后,就可以使用GDI Plus绘图了。

    Gdiplus::Graphics graphics(hDC);
    Gdiplus::Image image(L"face.png");
    graphics.DrawImage(&image, 10, 10);

参考文章:GDI+ 使用指南(basic guiding of GDI plus )

标签: GDI+, GDI Plus, 使用

添加新评论