65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.39/5 (76投票s)

2003年4月15日

2分钟阅读

viewsIcon

290215

downloadIcon

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 集成的更多信息 **

© . All rights reserved.