朱金灿
GDI+是GDI的升级版本。在VC6.0中并没有配备GDI+的相关文件。那么如何在VC6.0使用GDI+呢?我从网上搜索了一些资料,并结合自己的使用,总结出一下两种方法。下面我各建一个MFC工程介绍这两种做法。
1. 找到GDI+库文件和头文件,把它放到一个文件夹GDI+Files。这个文件夹包括30个头文件和一个库文件。
2.新建一个单文档工程“UseGdiPlus”,把文件夹GDI+Files拷贝进工程文件夹。
3.进行工程设置,选择VC的Project菜单栏的Setting菜单项,在对话框中的C/C++选项卡中的Category一栏中选择General, 在Project Options中加入一个选择:/I "GDI+Files",如下图所示:
在Project->stting->Link->Object/libary中加入GDI+Files/GdiPlus.lib,如下图所示:
4.新建一个.h文件QGdiPlus.h,该头文件的内容如下:
#pragma once
// Add GDI+ support to MFC or WTL application.
//
// Include this file in StdAfx.h
//
// MFC: Add a QGdiPlus variable to your application class to start and stop GDI+.
// ATL: Create a QGdiPlus local variable in _tWinMain.
// Constructor starts, destructor stops.
// Ensure that GdiPlus header files work properly with MFC DEBUG_NEW and STL header files.
// Q317799: PRB: Microsoft Foundation Classes DEBUG_NEW Does Not Work with GDI+
#define iterator _iterator
#ifdef _DEBUG
static int nGdiPlusObjects = 0;
namespace Gdiplus
{
namespace DllExports
{
#include <GdiplusMem.h>
};
#ifndef _GDIPLUSBASE_H
#define _GDIPLUSBASE_H
class GdiplusBase
{
public:
void (operator delete)(void* in_pVoid)
{
nGdiPlusObjects--;
DllExports::GdipFree(in_pVoid);
}
void* (operator new)(size_t in_size)
{
nGdiPlusObjects++;
return DllExports::GdipAlloc(in_size);
}
void (operator delete[])(void* in_pVoid)
{
nGdiPlusObjects--;
DllExports::GdipFree(in_pVoid);
}
void* (operator new[])(size_t in_size)
{
nGdiPlusObjects++;
return DllExports::GdipAlloc(in_size);
}
void * (operator new)(size_t nSize, LPCSTR /*lpszFileName*/, int /*nLine*/)
{
nGdiPlusObjects++;
return DllExports::GdipAlloc(nSize);
}
void operator delete(void* p, LPCSTR /*lpszFileName*/, int /*nLine*/)
{
nGdiPlusObjects--;
DllExports::GdipFree(p);
}
};
#endif // #ifndef _GDIPLUSBASE_H
}
#endif // #ifdef _DEBUG
#define ULONG_PTR DWORD
#include <gdiplus.h>
#ifdef _MFC_VER
#include <afx.h>
#endif
#undef iterator
using namespace Gdiplus;
#pragma comment (lib, "Gdiplus.lib")
class QGdiPlus
{
public:
QGdiPlus(): m_Token(0) { Gdiplus::GdiplusStartupInput input; Gdiplus::GdiplusStartup(& m_Token, & input, NULL); }
~QGdiPlus()
{
Gdiplus::GdiplusShutdown(m_Token);
#ifdef _DEBUG
#ifdef _MFC_VER
if (nGdiPlusObjects > 0)
afxDump << _T(">>> GdiPlus Memory Leaks: ") << nGdiPlusObjects << _T(" objects! <<</n");
else if (nGdiPlusObjects < 0)
afxDump << _T(">>> GdiPlus Multiple Deletes: ") << -nGdiPlusObjects << _T(" objects! <<</n");
#endif
#ifdef _ATL_VER
#endif
#endif
}
private:
// The token we get from GDI+
ULONG_PTR m_Token;
};
添加完代码之后注意在stdafx.加上一句:#include "QGdiPlus.h"
接着我们在App类里添加一个 QGdiPlus m_GdiPlus,这个对象主要是负责装载gdi+和卸载gdi+。
好了,现在我们开始体会GDI的强大功能吧。
在视图类的OnDraw函数里添加代码,实现显示一个透明字符串。代码如下:
void CUseGdiPlusView::OnDraw(CDC* pDC)
{
CUseGdiPlusDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
HDC hdc = pDC->GetSafeHdc();
Graphics mygraphics(hdc);//´´½¨Ò»¸öGraphics¶ÔÏó
SolidBrush brush(Color(100,0,0,255));//´´½¨Ò»¸ö±ÊË¢ µÚÒ»ÏîÊÇ͸Ã÷¶È ºóÈýÏîÊÇRGBÖµ
FontFamily fontFamily(L"Latha"); //Ñ¡ÔñÒ»ÖÖ×ÖÌå
Font font(&fontFamily,1,FontStyleRegular,UnitInch);
PointF pointF(5,5);
mygraphics.DrawString(L"Hello Word!",-1,&font,pointF,&brush);
}
程序效果图如下:
第二种方法是我参考网上的一个做法。
1.首先将GDI+的头文件拷贝进vc目录下的Includes(我的是:D:/Microsoft Visual Studio/VC98/Include),将GDI+的库文件vc目录下的Lib文件夹中(我的是:D:/Microsoft Visual Studio/VC98/Lib)
2.新建一个MFC单文档工程EmployGdiPlus。
3. 在Project->stting->Link->Object/libary中加入gdiplus.lib。
4.添加画图代码,代码如下:
void CEmployGdiPlusView::OnDraw(CDC* pDC)
{
CEmployGdiPlusDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
HDC hdc = pDC->GetSafeHdc();
Graphics mygraphics(hdc);//???¡§?"??Graphics??¨®
SolidBrush brush(Color(100,0,0,255));//???¡§?"??¡À??? ???"???????¡Â? ?¨®??????RGB??
FontFamily fontFamily(L"Latha"); //?????"??¡Á???
Font font(&fontFamily,1,FontStyleRegular,UnitInch);
PointF pointF(5,5);
mygraphics.DrawString(L"Hello Word!",-1,&font,pointF,&brush);
}
程序的效果如之前的那个程序。
相比较而言,第一种方法比第二种方法要比较灵活。
参考文献:
《最小二乘法拟合圆公式推导及vc实现》
在vc6.0中使用GDI+图形函数
http://www.bc-cn.net/Article/kfyy/vc/jszl/200703/4528.html
分享到:
相关推荐
VC6.0GDI++,绘制界面,VC6.0的一般不支持,需要自己添加
顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出...能直接使用GDI+,下面介绍一种很方便的在VC6.0中使用GDI+的方法
这个东西可以帮你从vc6中支持gdi+的编程。可以下载来安装后即可以用的
用MFCGDI+进行任意图片格式的展示和另存为bmp格式图片 参考博客https://blog.csdn.net/u013472838/article/details/39956343编写 需要配置GDI+ 自己用的VC6.0编译通过
VC6.0中用GDI+加载动态gif图片示例,用到了GDI+,IDE:VC6.0,OS:XP SP3,SDK写的非MFC。
vc6.0绿色精简版+vc助手+sdk更新包编译ghost
VC6.0助手[Visual+Assist+X+v10.0.1233.0+破解版(Cracked)].rar
这个方法亲身尝试 必定可以成功~ 带测试代码
在VC6.0中用GDI+调用png图片实现半透明渐变的特效窗口啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
在VC6.0中用GDI+调用png图片实现半透明渐变的特效窗口源码
VC6.0下面的spy++,小巧方便。
GDI+forVC6.0 的头文件、dll和lib库文件,附带一个例子 使用方法见 http://blog.csdn.net/whucv/article/details/7932921
win7中VC6.0visualC++6.0无法打开文件和向工程中添加文件的解决办法.pdf
Spy++ of VC6.0
根据网上的png button按钮类就行了修改,在VC6.0下可以用,用于显示透明的按钮。
1. 在单文档应用程序中使用GDI+ 在上面的过程中,我们就是以一个单文档应用程序Ex_GDIPlus作为示例的。下面列出第4步所涉及的代码: void CGDITestView::OnDraw(CDC* pDC) { CGDITestDoc* pDoc = GetDocument(); ...
1. 在单文档应用程序中使用GDI+ 在上面的过程中,我们就是以一个单文档应用程序Ex_GDIPlus作为示例的。下面列出第4步所涉及的代码: void CGDITestView::OnDraw(CDC* pDC) { CGDITestDoc* pDoc = GetDocument(); ...
vc6.0 所用的GDI库文件 vc6.0 所用的GDI库文件 vc6.0 所用的GDI库文件
在VC6.0中用GDI+调用png图片实现半透明渐变的特效窗口。