陳燈WGF工做內容及特色

WGF(windows graphic foundation)爲windows下的gdi和gdiplus雙緩衝繪圖框架。框架在VC6.0下使用C++語言開發而成並以可擴展的MFC動態連接庫形式提供,適用於windows操做系統。WGF爲徹底開源的免費產品,能夠用於任何商業的和非商業的用途。
WGF設計的目的是對windows下的gdi和gdiplus雙緩衝繪圖進行封裝和優化。WGF封裝了使用gdi和gdiplus進行雙緩衝繪圖的實現細節,使用框架進行雙緩衝繪圖時感受就像是在窗口上繪圖同樣。同時,WGF經過將繪圖內容劃分爲靜態場景和動態場景以及經過採用gdi和gdiplus混合繪圖的方式對windows下的gdi和gdiplus繪圖進行了優化。
 html

WGF經過一個導出類CDBDraw實現了對雙緩衝繪圖的封裝和優化。CDBDraw是一個很是簡單的類,其只有3個導出的公有成員函數供外部進行調用,分別是初始化成員函數(init())、繪圖成員函數(draw())和設置繪圖區大小的成員函數(setRect())。這3個函數都是採用的__stdcall函數調用約定,關於這些函數的詳細說明請參考源碼中的註釋,對於這些函數的使用方法請參考例程RobotField2D。CDBDraw類實現了對雙緩衝繪圖的隱藏,其在內部提供了保護類型的成員變量m_pDC和m_pGC分別用於gdi繪圖和gdiplus繪圖使用(m_pDC爲一個CDC類對象,m_pGC爲一個Graphics類對象)。在使用m_pDC和m_pGC進行繪圖時,圖形其實是被繪製在後備緩衝區中,可是CDBDraw類隱藏了雙緩衝繪圖中內存拷貝的細節以及對繪圖過程當中的各種資源的釋放都CDBDraw類進行了處理,用戶能夠不用擔憂內存泄漏等問題。同時,CDBDraw類在接口成員函數Draw()中對靜態場景和動態場景進行了處理以提升繪圖的性能。CDBDraw類中Draw()成員函數的執行流程見圖1 。編程

特色

a)    輕量級庫windows

WGF僅由一個導出類CDBDraw和一個非導出類CMemDC組成,屬於輕量級的庫。框架

b)    易於使用ide

WGF以動態連接庫的形式提供,能夠方便的被其餘的語言使用。函數

c)    封裝了雙緩衝繪圖細節性能

WGF封裝了雙緩衝繪圖的細節,用戶只須要使用CDBDraw類中提供的成員變量m_pDC和m_pGC進行繪圖,至於與雙緩衝有關的內存拷貝和各種資源的釋放等細節均由框架完成。優化

d)    封裝了gdiplus繪圖的額外工做併爲gdi和gdiplus混合繪圖提供了便利this

在vc6.0使用gdiplus進行繪圖時須要進行一系列的額外工做,包括包含頭文件、導入庫文件和gdiplus的啓動(GdiplusStartup())和關閉(GdiplusShutdown())等。WGF對gdiplus的這些工做進行了封裝,使用WGF並不須要進行gdiplus的任何配置便可直接進行gdiplus繪圖。同時,CDBDraw類中提供的m_pDC和m_pGC爲gdi和gdiplus混合繪圖提供了便利。spa

e)    高效性

WGF對靜態場景和動態場景採用了不一樣的處理方式並經過gdi和gdiplus混合編程解決了gdiplus中低效的內存拷貝問題,使得采用WGF進行繪圖的效率得以提高。效率的提高經過一個簡單的試驗可見一斑,即將drawStaticScene()虛函數中的繪圖代碼拷貝到drawDynamicScene()虛函數中,經過這一過程的先後對比發現拷貝後繪圖程序的CPU佔用率明顯上升。

 

 

 

圖1 繪圖接口流程圖

WGF源碼及文檔下載地址:

相關文章
相關標籤/搜索