MFC或原生C/C++中使用GDI+

作者:TW    翻译:琴剑  原文出处:Code Project

下载演示工程 - 25.4 Kb

为什么99.9%的GDI+的例子都是使用.NET语言呢?C/C++可以吗?

简介

如果你在Google上搜索GDI+的例子,我敢打赌你会得到成千上万的网址将你引到.NET代码。到书店,你会发现成打的书在将GDI+。但是,如果你希望查找GID+和MFC/ATL/WTL集成的信息,我打赌你什么也找不到(如果你能找到,劳驾将URL张贴出来!)。那么,是不可能还是太难了不值得这样做?

调查结果

答案是: 在MFC/ATL/WTL,甚至纯C语言,中使用GDI+非常简单。我必须承认我没有任何.NET的知识,我不是微软.NET的粉丝,我更愿意使用平台SDK。GDI+不只是用于.NET,如果你计划在低于XP的Windows版本下使用GDI+,那还需要发布GDI+运行时库(下载)。不要担心,它仅仅1.04MB,不象XX M的.NET运行时库。

如何?

。在stdafx.h中添加以下行

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

。初始化GDI+资源。在你的CWianAPP派生类中增加如下成员变量:

GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;

  在InitInstance()中,增加:

GdiplusStartup( & gdiplusToken ,   & gdiplusStartupInput ,   NULL );

。你的应用程序现在可以使用GDI+了。
。退出时,释放GDI+资源。添加如下代码行到ExitInstance():

GdiplusShutdown(gdiplusToken);


正如你看到的,如此简单。通常,将现有的WIN32/MFC/WTL绘图代码移植到GDI+非常简单。有必要吗?看,有一个GDI+ C++类叫做RedEyeCorrection,对,它用于校正闪光拍照有时会出现的红眼。如果你至少有一年的WIN32/MFC经验,可以进入该链接了解更多。

我引用了一个例子工程来证明以上结论。

GDI+是以设备上下文句柄为中心,因此,如果将绘图逻辑和实际的绘画代码分离,移植到GDI+是毫无问题的。有时,100行绘图代码使用GDI+可以减少到仅5行,因为GDI+具备支持复杂的绘图的能力。这意味着混合使用普通GDI和GDI+是很平常的。

提供下载的工程是一个标准的MFC SDI工程,如果你已经读过了(希望如此),你会发现它是如此简单。大多数时候,你可以简单的剪切加复制MSDN GDI+中嵌入的源代码来尝试。提示:如果GDI+需要加载外部文件,你可以右键点击帮助中的图片,然后保存,然后继续使用下载的工程做实验。

最后,你必须有一份平台SDK的副本,这样在VC的搜索途径中有所需的GDI+头文件、库。没有必要使用最新的版本,我就是使用的2002年8月出的版本。如果你不想安装SDK,GDI+文件可以从CAB_11中解出来。 

你可能感兴趣的:(MFC或原生C/C++中使用GDI+)