(发表时间: 2007-5-10 23:20:00)
唉,最近实在是感叹于自己的落伍. 这样一个令人兴奋的GDI+,却被我雪藏了很久,都不想用它.(可能是因为之前有GDI+漏洞的问题吧). 今天研究了一下才发现, 它恰恰为我提供了每天朝思幕想的一些功能, 如提供了一个Alpha透明度通道, 提供了字体和图形的反走样功能. 那还等什么呢? 赶快加入到GDI+的行列来吧. 哈哈. 不过, GDI+并不像原有的GDI那样,直接就可以使用.如果想要开发这样的程序,需要先按下面的配置一下.
如果你是Visual C++ 6.0的用户:
1. 下载GDI+的库. 运行GDI+需要一个GdiPlus.dll的文件; 开发GDI+的程序,还需要GdiPlus.lib和GdiPlus*.h文件.这些都可以在微软的网站上下到.(搜一下windows sdk,都出来了)
2. 将以上的文件放在你的工程中的一个目录,然后在stdafx.h中包含#include "GdiPlus.h" (这就取决于你放置那几个文件的地方了)
3. 在"工程"->"选项"里,添加一个链接库 GdiPlus.lib
如果你是Visual Studio 2003的用户:
不必去下载GDI+库了,因为VS2003已经自带了.
只要在stdafx.h文件中包括#include <gdiplus.h>,
并且要在#include <gdiplus.h>语句之前加:#define ULONG_PTR void* ,否则报错。
并在项目->选项->链接器->输入 中填上需要的lib库, gdiplus.lib即可
在程序的App类里,添加一个成员变量: ULONG_PTR m_gdiplusToken;
在App的InitInstance函数里, 在"INT_PTR nResponse = dlg.DoModal();"之前,添加下面的语句:
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
在"INT_PTR nResponse = dlg.DoModal();"之后添加下面的语句:
Gdiplus::GdiplusShutdown(m_gdiplusToken);
就可以使用GDI+了.使用的时候,注意先要声明使用GDI+的名字空间:
using namespace Gdiplus;
void CGDIplus2Dlg::OnDrawLine()
{
HDC hdc;
//PAINTSTRUCT ps;
Pen* myPen;
Graphics* myGraphics;
HWND hWnd=this->m_hWnd;
//hdc = ::BeginPaint(hWnd, &ps);
hdc = ::GetDC(hWnd);
myPen = new Pen(Color(255, 255, 0, 0), 3);
myGraphics = new Graphics(hdc);
myGraphics->DrawLine(myPen, 20, 10, 400, 200);
delete myGraphics;
delete myPen;
//::EndPaint(hWnd, &ps);
::ReleaseDC(hWnd,hdc);
}