一般來說,Windows的一個優點(實際上是現代操作系統的優點)是它可以讓開發人員不考慮特定設備的細節。例如:不需要理解硬盤設備驅動程序,只需在相關的.Net類中調用合適的方法,就可以編程讀寫磁盤上的文件。這個規則也適用於繪圖。計算機在屏幕上繪圖時,把指令發送給視頻卡。問題是市面上有幾百種不同的視頻卡,大多數有不同的指令集合功能。如果把這個i考慮在內,在應用程序中為每個視頻卡驅動程序編寫在屏幕上繪圖的特定代碼,這樣的應用程序就根本不可能編寫出來。這就是為什麼在Windows最早的版本中有Windows Graphical Device Interface(GDI)的原因。
GDI+提供了一個抽象層,隱藏了不同視頻卡之間的區別,這樣就可以調用Windows API函數完成指定的任務了,GDI還在內部指出在運行特定的代碼時,如果讓客戶機的視頻卡完成要繪制的圖形。GDI還可以完成其他任務。大多數計算機都有多個顯示設備---監視器、打印機。GDI成功的使應用程序所使用的打印機看起來與屏幕一樣。如果要打印某些東西,而不是顯示他們,只需告訴系統輸出設備是打印機,再用相同的方式調用相同的Windows API函數可以。
可以看出DC(設備環境)是一個功能非常強大的對象,在GDI下,所有的繪圖工作都必須通過設備環境完成。DC甚至可用於不涉及在屏幕或其他硬件設備上繪圖的其他操作,例如在內存中修改圖像。
GDI開發人員提供了一個相當高級的API,但它仍是一個基於舊Windows API並且有C語言風格函數的API,所以使用起來不是很方便。GDI+在很大程度上是GDI和應用程序之間的一層,提供了更直觀、基於繼承性的對象模型。盡管GDI+基本上是GDI的一個包裝器,但Microsoft已經能通過GDI+提供新的功能了並宣稱他又一些性能方面的改進。
1.GDI+命名空間
(不說了,自己看去吧!!!)
2.設備環境和Graphics對象
GDI使用設備環境(DC)對像識別輸出設備。DC對象存儲特定設備的信息並把GDI API函數調用轉換為要發送給設備的命令。還可以通過DC對象確定對應的設備有什麼功能(如打印機是彩色還是黑白的)。如果要求設備完成它不能完成的任務,設備對象就會檢測到並采取措施。
DC對象不僅可以硬件還可以用作到Windows的一個橋梁。例如如果Windows知道只有一小部分應用程序窗口需要重新繪制,DC就可以捕獲和撤銷在該地區外的繪圖工作。因為DC與Windows的關系非常密切,通過Dc來工作就可以用其他方式簡化代碼。
繪制圖形
下面舉例來說明如何在應用程序的主窗口中繪圖。DisplayAtStartup
創建一個C# 應用程序並在啟動窗體時在構造函數中繪制它。這並不是在屏幕上繪圖的最佳方式,這個示例並不能在啟動後按照需要重新繪制窗體。這樣只是不必作太多的工作就可以說明一些問題。
首先把窗體的背景色設置為白色。如果使用設計視圖設置背景色,系統會自動添加代碼:
private void InitializeComponent()
{
this.AutoScaleBaseSize = new System.Drawing.Size(5,13);
this.BackColor = System.Drawing.Color.White;
this.ClIEntSize = new System.Drawing.Size(292,266);
this.Name = "Form1";
this.Text = "Form1";
}