程序让生活更美好

半亩方塘 天光云影

  C++博客 ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  55 随笔 :: 4 文章 :: 202 评论 :: 0 Trackbacks

GDI Plus 描述:

    GDIPlus是微软出的一个C++面向对象库,它为windows的图形设备接口提供了更好的访问。与标准的windows GDI相比,二维绘图和图片使用得到很大改进。使用GDIPlus你可以绘制定制的对象,打开各种图片并以各种格式存储它们,使用多种字体和文本绘制轨迹 和各种调色板功能。

GDI Plus兼容性:

    GDIPlus最初是为MS Visual Studio 7开发的,但是因为这个产品的发布推迟了,所以微软就为Visual Studio 6发行了这个库的版本。如果你使用Visual Studio 6,可以从这里下载MFC GDI Plus库文件。http://www.codersource.net/samples/mfcgdiplus.zip

a)Visual Studio 7或者更新版本使用这个类库,只需要在你的工程里面包含<gdiplus.h>

b)早期版本的MSVS要使用这个类库,需要将下载的zip文件解压到一个文件夹,设其路径为your_path,然后将目录your_path\ gdiplus\includes加入到开发环境的包含路径中(Tools->Options->Directories-> Include files),然后在你的工程中你必须包含文件<gdiplus>,但是在那之前你必须定义define ULONG_PTR(这是GDIPlus中的一个定义,在老版本的VS中没有定义过)。也就是说,在StdAfx.h中你需要添加如下代码:

#define ULONG_PTR ULONG
include <gdiplus.h>

然后将目录your_path\gdiplus\lib包含到你的工程(Tools->Options->Directories->Library files),以使它们可以链接到你的程序。

【efivol补充:还必须在StdAfx.h中#include <gdiplus.h>之后加入这两句,不然有错。

using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")

补充完毕】

在编译完你的工程之后,将your_path\gdiplus\gdiplus.dll拷贝到生成的执行文件所在的文件夹(\Debug或者\Release)

使用GDI Plus类库:

要使用GDI Plus类库,你必须首先初始化类库。初始化是一个调用两个参数的函数,这两个参数是必须在整个GDIPlus会话中都存在的变量。在使用完GDIPlus之后,必须调用一个函数来关闭会话。

如果你使用MFC,一个好的方法是在你的CWinApp派生的类中(比如CYourProjectApp)添加变量:

private:
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_pGdiToken;

然后在app的InitInstance函数中的开始添加一行代码:

GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL); //gdi+ init

然后重载ExitInstance函数(如果没有的话),在其中添加一行代码:

GdiplusShutdown(m_pGdiToken); //gdi+ end session

这些操作之后你就可以在你的程序中使用类库的功能了。

可以使用了么?不可以。我们新建一个单文档的工程,按上面的步骤做完,然后在View类的OnDraw()函数里添加如下代码:

Graphics graphics(pDC->m_hDC);
Pen pen(Color(255, 0, 255));
graphics.DrawLine(&pen, 0, 0, 200, 100);

编译,出错。就这样还是被很多人转载,可恶吧。

错误提示为:
f:\includes\gdiplusenums.h(29) : error C2146: syntax error : missing ';' before identifier 'GraphicsState'
f:\includes\gdiplusenums.h(29) : fatal error C1004: unexpected end of file found

这个错误在网上百度一下有很多,问的人多,回答的人也多,但就是几乎没有人答对。解决方法是

在#include <gdiplus.h>之前加上#include <afxdtctl.h>

好了,一条线画出来了。为什么啊,这就不知道了,据说这个文件的作用是为IE4公共控件提供MFC支持。

柳暗花明之后,才发现这里有篇文章 Hints to get GDI+ running,是一个人写的建议。

里面说,要防止编译错误和问题,需要在#include <gdiplus.h>之前加上#include <afxwin.h>、<afxext.h>、<afxdisp.h>和<afxdtctl.h>。

posted on 2012-02-21 20:23 北风之神007 阅读(2184) 评论(0)  编辑 收藏 引用 所属分类: c/c++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理