幸運的是當編寫一個典型的Windows 表單程式時,表單和控制項的繪製、效果等操作是不需要特別加以考慮的。這是為什麼呢?因為通過使用.Net 架構,開發人員可以拖動一系列的控制項到表單上,並書寫一些簡單的與事件相關聯的代碼然後在IDE中按F5,一個完完全全的表單程式就誕生了!所有控制項都將自己繪製自己,表單或者控制項的大小和縮放都調整自如。在這裡經常會用到的,且需要引起一點注意的就是控制項效果。遊戲,自訂圖表控制項以及螢幕保護裝置程式的編寫會需要程式員額外撰寫用於響應 Paint 事件的代碼。
本文針對那些Windows 表單開發人員並有助於他們在應用程式編製過程中使用簡單的繪圖技術。首先,我們會討論一些基本的繪圖概念。到底誰在負責進行繪製操作?Windows 表單程式是如何知道何時該進行繪製的?那些繪製代碼究竟被放置在哪裡?之後,還將介紹映像繪製的雙重緩衝區技術,你將會看到它是怎樣工作的,怎樣通過一個方法來實現緩衝和實際顯示的映像間的交替。最後,我們將會探討”智能無效地區”,實際就是僅僅重繪或者清除應用程式表單上的無效部分,加快程式的顯示和響應速度。希望這些概念和技術能夠引導讀者閱讀完本文,並且有助於更快和更有效開發Windows 表單程式。
Windows 表單使用GDI+映像引擎,在本文中的所有繪圖代碼都會涉及使用託管的.Net 架構來操縱和使用Windows GDI+映像引擎。
儘管本文用於基本的表單繪圖操作,但是它同樣提供了快速的、有效且有助於提高程式效能的技術和方法。所以,在通讀本文之前建議讀者對.Net架構有個基本的瞭解,包括Windows 表單事件處理、簡單的GDI+對象譬如Line,Pen和Brush等。熟悉Visual Basic .Net或者C#程式設計語言。
概念
Windows 應用程式是自己負責繪製的,當一個表單”不乾淨”了,也就是說表單改變了大小,或者部分被其它程式表單遮蓋,或者從最小化狀態恢複時,程式都會收到需要繪製的資訊。Windows把這種”不乾淨”狀態稱為”無效的(Invalidated)”狀態,我們理解為:需要重繪,當Windows 表單程式需要重繪表單時它會從Windows訊息佇列中擷取繪製的資訊。這個資訊經過.Net架構封裝然後傳遞到表單的 PaintBackground 和 Paint 事件中去,在上述事件中適當的書寫專門用於繪製的代碼即可。