GDI+學習筆記之GDI+環境初始化

來源:互聯網
上載者:User

作者:朱金燦

來源:http://blog.csdn.net/clever101/


      儘管以前接觸過一下GDI+,但決心從現在開始系統學習GDI+,所用的教材為《精通GDI編程》。在VS 2010以下版本的VS 編譯器使用GDI+都需要對GDI+環境進行初始化操作(VS 2010中的MFC 10依賴GDI+,故不用初始化)。

VS 2003、VS 2005和VS 2008的GDI+環境初始化操作步驟一樣。

      在應用程式類添加一個保護許可權的資料成員:

ULONG_PTR m_gdiplusToken;


在應用程式類的實現檔案包含gdi+的標頭檔:


#include <GdiPlus.h>

在工程附加庫加上:GdiPlus.lib


然後在應用程式類的InitInstance加上下面初始化代碼:


BOOL C***App::InitInstance()<br />{<br />Gdiplus::GdiplusStartupInput StartupInput;<br />GdiplusStartup(&m_gdiplusToken,&StartupInput,NULL);<br />}<br />

上面代碼的作用是初始化GDI+資源。


  在應用程式類的InitInstance加上下面代碼:


int C***App::ExitInstance()<br />{<br />// TODO: 在此添加專用代碼和/或調用基類</p><p>Gdiplus::GdiplusShutdown(m_gdiplusToken);<br />return __super::ExitInstance();<br />}<br />

上面代碼的作用是銷毀GDI+資源。

VC 6.0中使用GDI+庫,請參考這篇文章:在VC6.0中使用GDI+的兩種辦法


     現在測試一下我們初始化GDI+環境是否成功。我們使用GDI+的類介面在視圖客戶區繪製一個字串,具體代碼如下:


CDC *pDC = pView->GetDC();<br />Gdiplus::Graphics graphics(pDC->m_hDC);<br />Gdiplus::Pen pen(Gdiplus::Color(255,0,0,255));<br />Gdiplus::SolidBrush brush(Gdiplus::Color(255,0,0,255));<br />Gdiplus::FontFamily fontfm(L"宋體");<br />Gdiplus::Font font(&fontfm,24,Gdiplus::FontStyleRegular,Gdiplus::UnitPixel);<br />CRect rt;<br />pView->GetClientRect(&rt);<br />Gdiplus::PointF pointF(rt.Width()/2,rt.Height()/2);<br /> graphics.DrawString(L"GDI+程式示意",-1,&font,pointF,&brush);<br /> graphics.ReleaseHDC(pDC->m_hDC);<br /> pView->ReleaseDC(pDC);<br />



如下:





使用GDI+一些注意事項:


1.在DLL中使用GDI+庫,只需要包含GdiPlus.h和GdiPlus.lib,初始化GDI+環境的工作只需要在主調用程式做,否則在DLL初始化代碼中初始化GDI+環境容易發生DLL重入的錯誤(以前我犯過這樣的錯誤)。


2.GDI+介面參數使用的是unicode字元集,因為調用任何GDI+類介面時其字串參數都必須確保是unicode字元。在多位元組字元集環境下開發常量字串可以通過L宏轉換,變數多位元組字元轉unicode字元可以使用Windows API函數MultiByteToWideChar或ATL的A2W宏。


3. GDI+的對象和GDI控制代碼一樣,同樣會佔用資源,一次使用過多的GDI+的對象甚至會發生程式崩潰的現象。因此必須隨時將不必要的GDI+的對象佔用的資源釋放掉,如上例的:graphics.ReleaseHDC(pDC->m_hDC)。


























聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.