很多时候我们在VC++中要用到GDI+来画一些东西,要用GDI+的东西,头文件,命名空间,类库这些东西是少不了的。
新建一个Win32工程,在头文件里面加入:
#include <gidplus.h>
using namespace gdiplus;
#pragma comment(lib, "gdiplus.lib")
如果直接这样用的话,编译就可能会出现错误,有上百个错误,而且错误显示是在系统文件里面,系统文件里面肯定一般是没有问题,像这种问题一般都是引入的头文件顺序不对或者有什么头文件依赖,遇到这种问题,首先要查看MSDN,看引的头文件是否正确,看到底应该引什么头文件,有没有依赖的头文件等。最后我实在找不到问题所以,就上网查了一下,大致找到了问题所在原因。
一,不stdafx.h头文件的情况。新建的工程,系统默认是会有预编译头文件stdafx.h的,在stdafx.h里面定义了一些常用的头文件,你也可以不让系统引用这个文件,在工程属性中可以设置,如下图所示:
图1 打开工程属性对话框
图2 预编译头文件位置
图3 从下拉列表中选择第一项,关闭预编译头文件
二,引stdafx.h头文件的情况,在这种情况下,就必须把这个文件里面的一些东西去掉:
1) 把#define WIN32_LEAN_AND_MEAN宏注释了,这样再加入GDI+相关的东西,就不会出错。
2) 在stdafx.h头文件里加入#include <comdef.h>,这样也可以解决这个问题。
这两种方式者可以解决问题,我觉得第一种可能会好一些,不会引入可能用不到的头文件。原因我会在后面进一步解释。
三,关于#define WIN32_LEAN_AND_MEAN宏
MS的解释是// Exclude rarely-used stuff from Windows headers,意思就是说从windows头文件中去掉一些极不常用东西,这样可以加快编译速度。一般包含windows.h要包含一堆用不到的头文件,我估计,有了这句话,它就把windows.h中关于gdiplus.h中要用到的信息就去掉了。
You can reduce the size of the Windows header files by excluding some of the less common API declarations as follows:
四,关于<comdef.h>头文件
头文件comdef.h使我们的应用程序能够使用Visual C++中的一些特殊COM支持类。有了这个头文件,gdiplus.h里面有东西就可以用了。