在VC6中使用 GdiPlus

在 VC6 中使用 GdiPlus
2008-10-24 01:11

安装三部曲:
Step1
 :下载 GdiPlus SDK 文件包;
链接地址1:http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip 
链接地址2:http://www.codersource.net/samples/mfcgdiplus.zip


Step2 :安装;
(1)头(GdiPlus*.h)文件安装目录:C:/Program Files/Microsoft Visual Studio/VC98/GdiPlus;
(2)静态库(GdiPlus.lib)文件安装目录:C:/Program Files/Microsoft Visual Studio/VC98/Lib;
(3)动态库(GdiPlus.dll)文件安装目录:Copy 到 exe 文件存放目录或者直接使用系统中自带的 GdiPlus.dll;


Step3 :配置开发环境下的路径
从 VC6 主菜单 Tools->Options... 进入设置窗口,选择 Directories 选项卡,在 Show directories for: 下拉列表中选择 Include files,在列表中增加 C:/Program Files/Microsoft Visual Studio/VC98/GdiPlus。

GdiPlus_Include

Step1:下载 GdiPlus SDK 文件包

    VC6 的安装程序并没有包含 GdiPlus 相关的库文件和头文件,所以想在VC6中使用 GdiPlus,你首先得把这些文件下载到本地。微软的说法是 GdiPlus 相关的库文件和头文件已经合入到 .Net Platform SDK 里面,所以开发人员只需要下载安装 SDK 即可。但也有相当一部分开发人员是不想为了 GdiPlus 就安装 SDK 的,于是就有热心之人从 SDK 中把 GdiPlus 相关的这些文件单独抽离了出来,形成了 GdiPlus SDK 文件包。

你可以尝试通过以下链接地址进行下载:
链接地址1:http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip 
链接地址2:http://www.codersource.net/samples/mfcgdiplus.zip

解压之后,请核对一下文件夹中的目录结构:
Root (Directory)
│ 
├Includes (Directory)
│ ├GdiPlus.h
│ ├GdiPlusBase.h
│ ├……
│ ├……
│ └GdiPlus*.h
├Lib (Directory)
│ └GdiPlus.lib
└GdiPlus.dll

Step2:安装


    理论上讲,把下载回来的这些文件放在硬盘上的任意一个位置都是可以的,只要在 Step3 中进行相应正确的配置,都能够在 VC6 中把 GdiPlus 用起来。

我采取的做法是:
(1)头(GdiPlus*.h)文件安装目录:C:/Program Files/Microsoft Visual Studio/VC98/GdiPlus;
    把 GDI+ SDK 文件包中的 Includes 目录重命名为 GdiPlus,再把 GdiPlus 文件夹 Copy 到 C:/Program Files/Microsoft Visual Studio/VC98 目录里面,换句话说就是把文件包中所有的 GdiPlus*.h 文件 Copy 到 C:/Program Files/Microsoft Visual Studio/VC98/GdiPlus 目录下。

(2)静态库(GdiPlus.lib)文件安装目录:C:/Program Files/Microsoft Visual Studio/VC98/Lib;
    把 GdiPlus.lib Copy 到 C:/Program Files/Microsoft Visual Studio/VC98/Lib 中。

(3)动态库(GdiPlus.dll)文件安装目录:Copy 到 exe 文件存放目录或者直接使用系统中自带的 GdiPlus.dll; 
    事实上在安装 Windows 操作系统(2000以及以上版本)的时候,安装程序就已经把 GdiPlus.dll Copy 到了系统目录里面了。随着 Windows 补丁的不断更新,你也许还会在系统目录里面发现同时存在多个不同版本的 GdiPlus.dll(我尝试搜索了一下 C:/Windows 目录,发现两个不同版本的 GdiPlus.dll)。
    对于 GdiPlus.dll 不同版本的问题,微软建议软件开发厂商可以把自己开发测试时候所使用的 GdiPlus.dll 版本放到自己产品的安装目录下,随产品一起发布,这样程序在装载 GdiPlus.dll 的时候,会优先选择安装目录下的版本进行装载。
    这种做法的目的可以这样理解,假设现在 GdiPlus.dll 发现漏洞需要升级,但是用户操作系统由于没有及时打补丁或者其他原因,系统目录下的 GdiPlus.dll 未能及时更新(系统仍然在使用一个存在漏洞的 GdiPlus.dll)。此时用户安装了一个新软件,这个软件里面如果有打包 GdiPlus.dll 版本的话,那软件运行时候所使用的 GdiPlus.dll 版本与软件开发测试时候所使用的版本就是一致的,这样就可以把软件运行时候受漏洞影响的可能性降到最低。
    文件包中的 GdiPlus.dll 文件版本是 5.0.3049.0,微软最近更新的一个 GdiPlus.dll 版本是 5.1.3102.2180。我的 Windows XP 系统一直都有进行比较及时的自动更新,通过 Windows 的搜索功能可以在 C:/Windows 目录里面找到 GdiPlus.dll 的最新版本。另外我在腾讯 QQ 的安装目录下也发现了 GdiPlus.dll 的最新版本。

Step3:配置开发环境下的路径


为了让 VC6 在编译的时候,能够找到 GDI+ 相关的库文件和头文件,还需要在 VC6 开发环境中进行目录配置。
(1)从 VC6 主菜单 Tools->Options... 进入设置窗口,选择 Directories 选项卡;
(2)在 Show directories for: 下拉列表中选择 Include files,在列表中增加 GdiPlus 头文件所存放的目录路径,这个路径应该与 Step2 里面(1)的路径一致;
(3)在 Show directories for: 下拉列表中选择 Library files,在列表中增加 GdiPlus.lib 所存放的目录路径,这个路径应该与 Step2 里面(2)的存放路径一致;
(4)重启 VC6,以保存修改后的配置。

下面用 VC6 来写一个 GdiPlus 的 Demo 工程

Demo_GdiPlus 运行效果图

Step1:新建一个名为 Demo_GdiPlus 的 MFC AppWizard(exe) 工程 

操作步骤:
(1)主菜单File->New...,选择 Projects 选项卡;
(2)在工程类型列表中选中 MFC AppWizard(exe);
(3)Project name 填入 Demo_GdiPlus,按 OK 进入下一页;
(4)选择单文档(Single document)类型的程序框架,按 Finish 完成工程创建工作。


Step2:添加头文件声明

在 StdAfx.h 中添加以下代码:

//  {{AFX_INSERT_LOCATION}}
//  Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
typedef unsigned  long  ULONG_PTR,  *  PULONG_PTR;
#include  <  gdiplus.h  > 
using  namespace  Gdiplus;
#pragma  comment (lib, "GdiPlus.lib") 

Step3:在 CDemo_GdiPlusApp 中增加成员变量 m_gdiplusToken,并在构造函数中进行初始化

class  CDemo_GdiPlusApp :  public  CWinApp
{
private  :
ULONG_PTR m_gdiplusToken;
//  …… …… 
};

CDemo_GdiPlusApp::CDemo_GdiPlusApp()
{
//  TODO: add construction code here,
//  Place all significant initialization in InitInstance 
m_gdiplusToken  =  NULL;
}

Step4:添加安装和卸载 GdiPlus 的代码
通过 ClassWizard 在 CDemo_GdiPlusApp 中增加成员函数

//  .h 中的声明 
virtual  BOOL InitInstance();
virtual  int  ExitInstance();

//  .cpp 中的实现 
BOOL CDemo_GdiPlusApp::InitInstance()
{
//  加载 GdiPlus 
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(  &  m_gdiplusToken,  &  gdiplusStartupInput, NULL);
//  …… …… 
}


int  CDemo_GdiPlusApp::ExitInstance() 
{
//  TODO: Add your specialized code here and/or call the base class
//  卸载 GdiPlus 
if  (m_gdiplusToken)
   Gdiplus::GdiplusShutdown(m_gdiplusToken);  
return  CWinApp::ExitInstance();
}

Step5:找到 CDemo_GdiPlusView::OnDraw() 函数,在里面添加一段 GdiPlus 的绘图代码

void  CDemo_GdiPlusView::OnDraw(CDC  *  pDC)
{
CDemo_GdiPlusDoc  *  pDoc  =  GetDocument();
ASSERT_VALID(pDoc);
//  TODO: add draw code for native data here 

Graphics graphics(pDC  ->  GetSafeHdc());

//  Pen can also be constructed using a brush or another pen.   There is a second parameter - a width which defaults to 1.0f 
Pen blue (Color(  255  ,  0  ,  0  ,  255  ));
Pen red   (Color(  255  ,  255  ,  0  ,  0  ));

int  y  =  256  ;
for  (  int  x  =  0  ; x  <  256  ; x  +=  5  )
{
   graphics.DrawLine(  &  blue,  0  , y, x,  0  );
   graphics.DrawLine(  &  red,  256  , x, y,  256  );  
   y  -=  5  ;
}  
}


编译运行,Demo 程序完成。留住这个 Demo 程序,今后我们会利用它进行更加深入的 GdiPlus 学习.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Visual C++6.0使用GDI+的一般方法 1. 载解压GDI+开发包; 2. 正确设置include & lib 目录; 3. stdafx.h 添加: #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif #include 或者 将Visual C++ 2005下的BaseTsd.h头文件(该文件已放入GDI+开发包的Include目录)替换Visual C++ 6.0下的 BaseTsd.h头文件。然后: #include <basetsd.h> #include 或者 将Visual C++ 2005下的BaseTsd.h头文件(该文件已放入GDI+开发包的Include目录)放入GDI+开发包的 Include目录,并在VC6.0 IDE添加的包含文件的路径,且将其置前。(方法:工具-> 选项-> 目录 ,添 加lib和include GDI+所在路径,并把他们置前。) 然后: #include <basetsd.h> #include 4. 程序添加GDI+的包含文件gdiplus.h以及附加的类库gdiplus.lib。 通常gdiplus.h包含文件添加在应用程序的stdafx.h文件,而gdiplus.lib可用两种进行添加: 第一种是直接在stdafx.h文件添加下列语句: #pragma comment( lib, "gdiplus.lib" ) 另一种方法是: 在VC6.0 添加库文件在:工具-> 选项-> 目录 ,添加lib和include GDI+所在路径,并把他们置前 在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的矩形区域 } 2.第2个例子 #include #include //加了没有。 #include using namespace Gdiplus;//加了没有。 INT main() { GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken;, &gdiplusStartupInput;, NULL);//加了没有。 Image* image = new Image(L "FakePhoto.jpg "); printf( "The width of the image is %u.\n ", image-> GetWidth()); printf( "The height of the image is %u.\n ", image-> GetHeight()); delete image; GdiplusShutdown(gdiplusToken);//加了没有。 return 0; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值