接著給Form1構造函數添加代碼。使用窗體的CreateGraphics()方法創建一個Graphics對象,其中包括繪圖時需要的使用的Windows DC。創建的DC即與顯示設備相關也與窗口相關。
public Form1()
{
InitializeComponent();
Graphics dc = this.CreateGraphics();
this.Show();
Pen bluePen = new Pen(Color.Blue,3);
dc.DrawRectangle(bluePen,0,0,50,50); //矩形
Pen redPen = new Pen(Color.Red,2);
dc.DrawEllipse(redPen,0,50,80,60); // 橢圓
}
然後調用Show()方法顯示窗口。必須讓窗口立即顯示,因為在其顯示之前不能作任何工作。(沒有繪圖的地方)
最後顯示一個矩形和橢圓。注意其中坐標(x,y)表示從窗口的客戶區域左上角向右的X個像素,
向下的Y個像素。
(其中DrawRectangle()和DrawEillipse()這兩個函數前面已經講過不再重復了。)
上面程序窗體如果最小化再恢復,繪制好的圖形就不見了。如果在該窗體上拖動另一個窗口,使之只遮擋一部分圖形,再把該窗口拖離這個窗體,臨時被遮擋的部分就消失了,只剩下一半橢圓或矩形了!原因是:如果窗體的一部分被隱藏了,Windows通常會立即刪除與其中顯示的內容相關的所有信息。在窗口的某一部分消失時,那些像素也就丟失了(即Windows釋放了保存這些像素的內存)。
但要注意窗口的一部分被隱藏了,當它檢測到窗口不再被隱藏時,就請求擁有該窗口的應用程序重新繪制其內容。這個規則有一些例外----窗口的一小部分被擋住的時間比較短(顯示菜單時)。一般情況下應用程序就需要在以後重新繪制它。
由於本示例把繪圖代碼放在Form1的構造函數中,故不能在啟動後再次調用該構造函數進行重新繪制。