vc6.0下,GDI+的配置

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值