(发表时间: 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);	
}