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






3.39/5 (76投票s)
2003年4月15日
2分钟阅读

290215

4935
为什么 99.9% 的 GDI+ 示例都是 .NET 语言?C/C++ 呢?
引言
如果在 Google 上搜索 GDI+ 示例,我敢打赌你会得到成百上千个指向 .NET 免费代码的 URL。 如果你去书店,你会看到几十本关于 GDI+ 的书。 但是,如果你尝试查找有关将 GDI+ 与 MFC/ATL/WTL 集成的信息,我敢打赌你找不到(如果可以,请发布 URL!)。 那么,这是不可能的还是太难了,不值得使用?
发现
答案是:在 MFC/ATL/WTL 甚至直接的 C 语言中使用 GDI+ 非常容易。 首先,我必须承认我对 .NET 一无所知,我不是 Microsoft .NET 的粉丝,而是更喜欢平台 SDK。 GDI+ 不仅仅适用于 .NET,如果您计划在低于 XP 的 Windows 版本上使用 GDI+,那么您将必须重新分发 GDI+ 运行时 (here)。 别担心,它只有 1.04 MB,而不是 xx MB 的 .NET 运行时。
然后呢?
- 将以下行添加到您的 stdafx.h
#include <gdiplus.h> using namespace Gdiplus; #pragma comment(lib, "gdiplus.lib")
- 初始化 GDI+ 资源。 将此作为成员添加到您的
CWinApp
派生类中GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken;
在
InitInstance()
中,添加GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
- 您的应用程序现在已准备好使用 GDI+。
- 退出时,释放 GDI+ 资源。 将以下行添加到
ExitInstance()
GdiplusShutdown(gdiplusToken);
如您所见,它非常简单。 通常,将您现有的 WIN32/MFC/WTL 绘图代码移植到 GDI+ 应该非常容易。 如果你问为什么? 考虑一下有一个 GDI+ C++ 类叫做 RedEyeCorrection
,没错,可以纠正闪光照片中偶尔出现的红眼。 如果您至少有一年的 WIN32/MFC 经验,只需点击 here 查看更多信息。
我包含了一个演示项目来演示以上内容。 尽情享受吧!
GDI+ 是以设备上下文句柄为中心的,因此,如果您可以将绘图逻辑与实际绘图代码分开,那么移植到 GDI+ 就没有问题。 在某些情况下,借助 GDI+ 对复杂绘图练习的大力支持,可以将 100 行绘图代码减少到只有 5 行。 这意味着将普通 GDI 与 GDI+ 混合是一项微不足道的任务。
下载的项目是一个标准的 MFC SDI 项目,如果您阅读了它(我希望如此...),您会发现它非常简单,令人难以置信。 几乎所有时候,您都可以简单地剪切并粘贴 MSDN GDI+ 中嵌入的源代码来尝试。 一条提示:如果 GDI+ 需要加载外部文件,您只需右键单击帮助中的图像并保存它,然后继续使用下载的项目继续测试。
最后,您确实需要一份平台 SDK 才能在您的 VC 搜索路径中拥有必要的 GDI+ 标头、库。 对于最新版本来说这不是必需的,我使用的是 Aug'02 版本。 如果您不想安装 SDK,可以从 CAB_11 中提取 GDI+ 文件。
** 不要忘记访问 here 以获取有关将 GDI+ 与 Win32/MFC/ATL/WTL 集成的更多信息 **