您的位置:首页 > 其它

vc6.0下,GDI+的配置

2015-07-24 11:22 176 查看


Step1:


下载GDI+ SDK for Visual C++6.0

下载地址:http://groups.google.com/group/tim-files/files?upload=1 名为GDIPlus.zip


Step2:

解压缩GDIPlus.zip,如下图所示



将Includes里面的所有东西拷贝到vc6.0安装目录下的Includes文件里。然后把Lib里面的GdiPlus.lib拷贝到vc6.0安装目录下的Lib文件里








Step3:


(1)在StdAfx.h中添加代码

添加的代码如下:

#define ULONG_PTR ULONG

#include <gdiplus.h>

using namespace Gdiplus;

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

(2)然后编译、连接工程

至于如何编译和连接工程,我想就不废话了吧,按两下按钮就OK了。
如果此时出现如下错误:
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>

(3)将GDI+解压出来的文件下的gdiplus.dll拷贝到工程Debug或Release目录下。


Step4:

(1)在CWinApp派生类中添加成员变量

如果你的工程名字是test,那么CWinApp的派生类的名字就为CtestApp。在CtestApp的头文件(也就是test.h)中,添加如下代码:

private:

GdiplusStartupInput m_gdiplusStartupInput;

ULONG_PTR m_pGdiToken;

或者是通过类CtestApp添加私有成员变量 GdiplusStartupInput
m_gdiplusStartupInput;ULONG_PTR m_pGdiToken;

(2)在CWinApp派生类中的InitialInstance函数中添加初始化代码

添加的代码如下:

GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

(3)为CWinApp派生类添加Virtual Function

添加的虚函数的名字为ExitInstance,并在ExitInstance中添加如下退出GDI+的代码:

GdiplusShutdown(m_pGdiToken);


Step5:

测试GDI+环境是否配置成功

在View类下找到OnDraw函数,然后在OnDraw函数中添加如下代码:

Graphics graphics(pDC->m_hDC);

Pen pen(Color(255, 0, 255));

graphics.DrawLine(&pen, 0, 0, 200, 100);

然后编译,运行工程,如果可以显示出一条线,就证明已经配置成功了。

特别注意

如果你建立的是一个基于对话框的程序,可能无法使用GDI+。因为我尝试过在对话框程序下面配置GDI+,总是出现如下的错误:

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>,那么在编译阶段是不会有错误的,但是连接的时候就会出现同样的错误,而且不能通过。

但是,单文档的应用程序,按照上面的配置就不会出现编译或链接的错误的。

但是,不知道为什么,后来我建立了一个基于对话框的程序,就没有上面的编译的问题。只是不能绘制出曲线。

如果是基于对话框的程序,那么需要相应WM_PAINT消息,然后再OnPaint函数中添加如下代码:

void CDlgGDIDlg::OnPaint()

{

CPaintDC dc(this); // device context for painting

CDC* pDC=GetDC();

Graphics graphics(pDC->GetSafeHdc());

//添加自己的绘制代码

ReleaseDC(pDC);

}

可是仍不能绘制出曲线,原因是如果你建立的是基于对话框的应用程序,那么初始化InitialInstance中的初始化GDI+的代码必须放在DoModal函数之前。然而,即便如此,我发现在OnPait函数中的GDI+代码可以画出来,可是在按钮下面的仍然是编译通过,但是画不出来。

不过有一种解决方法就是在按钮下面调用OnPaint函数,然后再调用RedrawWindow函数就可以了。比如下面的程序:

void CGDIDlg::OnPaint()

{

CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here

// Do not call CDialog::OnPaint() for painting messages

using namespace Gdiplus;

Graphics graphics( dc.m_hDC );

if(m_filename!="")

{

Image image(m_filename.AllocSysString());

graphics.DrawImage(&image,0,0);

UpdateWindow();

}

}

void CGDIDlg::OnFileOpen()

{

// TODO: Add your command handler code here

//利用系统的打开对话框

static char szFilter[]="位图文件(*.bmp;*.dib)|*.bmp;*.dib|JPG文件(*.jpg)|*.jpg|All Files(*.*)|*.*||";

CFileDialog dlg(true,"*.bmp",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);

if(dlg.DoModal()==IDOK)

{

UpdateData(true);

m_filename=dlg.GetPathName();

m_pImage=Image::FromFile(m_filename.AllocSysString());

}

else

{

return;

}

OnPaint();

RedrawWindow();

}

如果是单文档或多文档的,要在OnDraw函数中添加如下代码:

void CExampleView::OnDraw(CDC* pDC)

{

CExampleDoc* pDoc=GetDocument();

ASSERT_VALID(pDoc);

if(!pDoc) return;

//添加内容

Graphics graph(pDC->GetSafeHdc());

//添加自己的绘制代码

}

转载来自:http://blog.csdn.net/poonjun/article/details/3701724
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: