這些功能有漸層筆刷 (Gradient Brushes)、透明混色 (Alpha Blending)、曲線 (Cardinal Splines & Bezier Splines)、平面座標轉換 (Transformations and the Matrix Object)、Scalable Regions 以及支援了更多的圖檔格式 (bmp, gif, jpeg, png, tiff, icon, exif, wmf, emf)。此外,還有 GraphicsPath 可以利用線、矩形、橢圓、曲線、文字..等元素,來產生向量資訊。
要在 MFC 上使用 GDI+ 的步驟如下:
- 至微軟 MSDN下載 Windows Platform SDK
- 建立 MFC 專案,並設定 include 與 lib 等相關連結
- 在 stdafx.h 加入下列程式碼
#include <gdiplus.h> using namespace Gdiplus; #pragma comment(lib, "gdiplus.lib")
- 在繼承 CwinApp 的子物件中,加入下列變數的宣告
GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken;
- 在 InitInstance() 加入
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
- 最後在 ExitInstance() 加入
GdiplusShutdown(gdiplusToken);
void CTestGDIPlusView::OnDraw(CDC* pDC) { CTestGDIPlusDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; Pen myPen(Color(255, 255, 0, 0), 3); Graphics myGraphics(pDC->m_hDC); myGraphics.DrawLine(&myPen, 20, 10, 200, 100); }
最後,還有一個問題必須特別注意:MFC 在 debug 下,為了 memory leak 與錯誤行號的顯示,會在每個 cpp 檔案開頭,利用下列程式,將 new 宣告為 DEBUG_NEW。
#ifdef _DEBUG #define new DEBUG_NEW #endif因此 Graphics 物件若是以 new 產生,會發生 C2660 的錯誤訊息。解決辦法是將這段程式刪除,或直接修改 GdiplusBase 程式。方法請參考微軟的網站 PRB: Microsoft Foundation Classes DEBUG_NEW Does Not Work with GDI+
[Reference]
Using GDI+
Using GDI+ with MFC or native C/C++
沒有留言:
張貼留言