在VC2010上配置GDI+(图像库)

本文介绍了如何在VC2010中配置GDI+图像库,通过修改stdafx.h文件,解决编译错误,并提供了替代方法以避免在头文件中直接包含GDI+相关文件导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


GDI含义是图形设备接口,主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。GDI的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便了开发工作。

 

通常,在使用VC开发图像时,C/C++的默认库将不能提供足够的支持。所以要使用附加的库来实现图像的开发工作。通常,这样的库包括GDI,GDI+,OpenGL等。本文实现了在VC2010上配置GDI+(图像库)环境的方法。

1.      新建一个Win32工程,在这里选择vc默认的非空白项目。

2.      在头文件“stdafx.h”最后末尾处中添加:

#include<gidplus.h>

using namespacegdiplus;

#pragmacomment(lib, "gdiplus.lib")

3.      如果直接这样用的话,编译就可能会出现错误,有上百个错误,而且错误显示是在系统文件里面

4.      在网上查找原因,有两种方案解决这个问题: 1)把#define WIN32_LEAN_AND_MEAN宏注释了,这样再加入GDI+相关的东西,就不会出错。2)在stdafx.h头文件里加入#include <comdef.h>,这样也可以解决这个问题。

5.      我在自己的工程上实验了一下,发现在stdafx.h上更本找不到宏定义,所以也不存在注释的可能。然而,使用第二中情况,也遇到了问题。在头文件末尾添加<comdef.h>并不能改变编译错误。

6.      最后尝试变换了添加顺序接解决了这个问题。现头文件如下:

#pragma once

 

#include "targetver.h"

 

#include <comdef.h>

#include <stdio.h>

#include <tchar.h>

#define ULONG_PTR ULONG

#include <gdiplus.h>

using namespace Gdiplus;

#pragma comment(lib,"gdiplus.lib")

 

// TODO: 在此处引用程序需要的其他头文件

7.      除了用以上的方法连接gdiplus.lib之外,还可以在Project->Settings->Link->Object/library modules中输入gdiplus.lib(若有多个库,可用空格隔开,但GDI+只有一个库)。这种方法,可不用在StdAfx.h中输入#pragma comment

参考文章:

http://blog.youkuaiyun.com/desow/article/details/4592847

http://blog.sina.com.cn/s/blog_5f8817250100f5o6.html

http://blog.youkuaiyun.com/awillaway/article/details/8459608

Visual C++6.0使用GDI+的一般方法 1. 载解压GDI+开发包; 2. 正确设置include & lib 目录; 3. stdafx.h 添加: #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif #include 4. 程序中添加GDI+的包含文件gdiplus.h以及附加的类gdiplus.lib。 通常gdiplus.h包含文件添加在应用程序的stdafx.h文件中,而gdiplus.lib可用两种进行添加: 第一种是直接在stdafx.h文件中添加下列语句: #pragma comment( lib, "gdiplus.lib" ) 另一种方法是: 在VC.net中添加文件在:项目菜单->属性->链接器->输入 举个例子: (1)在应用程序项目的应用类中,添加一个成员变量,如下列代码: ULONG_PTR m_gdiplusToken; 其中,ULONG_PTR是一个DWORD数据类型,该成员变量用来保存GDI+被初始化后在应用程序中的GDI+标识,以便能在应用程序退出后,引用该标识来调用Gdiplus:: GdiplusShutdown来关闭GDI+。 (2)在应用类中添加ExitInstance的重载,并添加下列代码用来关闭GDI+: int CGDITestApp::ExitInstance() { Gdiplus::GdiplusShutdown(m_gdiplusToken); return CWinApp::ExitInstance(); } (3)在应用类的InitInstance函数中添加GDI+的初始化代码: 注意:下面这些GDI+的初始化代码必须放在m_pMainWnd->UpdateWindow();之前。 CWinApp::InitInstance(); Gdiplus::GdiplusStartupInput gdiplusStartupInput; Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL); (4)在需要绘图的窗口或视图类中添加GDI+的绘制代码。 下面分别就单文档和基于对话框应用程序为例,说明使用GDI+的一般过程和方法。 1. 在单文档应用程序中使用GDI+ 在上面的过程中,我们就是以一个单文档应用程序Ex_GDIPlus作为示例的。下面列出第4步所涉及的代码: void CGDITestView::OnDraw(CDC* pDC) { CGDITestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here usingnamespace Gdiplus; Graphics graphics(pDC->m_hDC); Pen newPen(Color(255,0,0),3); HatchBrush newBrush(HatchStyleCross,Color(255,0,255,0),Color(255,0,0,255));//创建一个填充画刷,前景色为绿色,背景色为蓝色 graphics.DrawRectangle(&newPen,50,50,100,60);// 在(50,50)处绘制一个长为100,高为60的矩形 graphics.FillRectangle(&newBrush,50,50,100,60); // 在(50,50)处填充一个长为100,高为60的矩形区域 } 编译并运行,结果如图:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值