Windows 繪圖的認識 在視窗 Form 表單上, 繪製圖案, 必須要有幾個動作 : Step 1: 定義及取得 Graphics 物件,Graphics 代表 Windows 中的繪圖區域, 範圍為 Form 表單視窗 Step 2: 利用 Graphics 物件來進行各種繪圖 Step 3: 必須釋放 Graphics 物件, 使用 Dispose( ) 釋放 [ 範例 ] 設計一個程式, 當按鈕按下去後, 開始進行繪圖, 第一個繪出方形, 第二個繪出弧形 Step 1: 設計一個 Form1 表單, 如圖所示 14-1
Windows 繪圖的認識 Step 2: 在 Button1_Click 事件程序內, 輸入下列程式 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim d = Me.CreateGraphics() d.drawrectangle(pens.black, 200, 30, 80, 60) d.drawarc(pens.blue, 30, 10, 100, 190, 45, 150) d.dispose() End Sub End Class [ 程式說明 ] 1.DrawRectangle( ) 是畫方形 2.DrawArc( ) 是畫弧形 3.(Pens.Black,200,30,80,60) 對照 ( 黑色筆,X 座標,Y 座標, 寬 80, 高 60) 14-2
Windows 繪圖的認識 Step 3: 實際程式對照, 如圖所示 實際程式對照 14-3
Windows 繪圖的認識 Step 4: 執行程式畫面, 如圖所示 執行繪圖 14-4
Windows 繪圖的認識 [ 分析討論 ] 1. 假設, 我們用其它視窗, 移至剛才畫好的圖形上方, 如圖一所示 2. 結果, 發現圖形無法復原, 如圖二所示 圖一 : 圖形被蓋住部份 圖二 : 無法復原圖形 14-5
Windows 繪圖的認識 3. 但是若使用 Windows 7 作業系統, 同樣蓋住一部份, 如圖一所示 4. 結果不會被影響, 如圖二所示 圖一 : 使用 Windows 7 圖二 : 不受到影響 14-6
Windows 繪圖的認識 [ 問題解決 ] Step 1: 開啟事件表單, 如圖一所示 Step 2: 快按二下 Paint 項目, 如圖二所示 圖一 : 開啟事件表單 圖二 : 選取 Paint 事件 14-7
Windows 繪圖的認識 Step 3: 開啟 Paint 事件程序視窗, 如圖一所示 Paint 事件程序 Step 4: 我們也可以從 Form1 事件中, 來選取 Paint 事件, 如圖二所示 另一個方法開啟 Paint 事件 14-8
Windows 繪圖的認識 Step 5: 參考下列程式, 把前一個範例程式, 放入 Form1_Paint 中 Public Class Form1 Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint Dim d = Me.CreateGraphics() d.drawrectangle(pens.black, 200, 30, 80, 60) d.drawarc(pens.blue, 30, 10, 100, 190, 45, 150) End Sub End Class [ 程式說明 ] 1. 不用再寫 Dispose( ) 函式, 它會自動釋放 14-9
Windows 繪圖的認識 Step 6: 實際程式對照, 如圖一所示 Step 7: 順利執行, 如圖二所示 實際程式對照 順利繪圖執行 14-10
Form 的繪圖座標 一般的數學幾何座標為 : Y 原點 (0,0) X 一般數學座標系統 14-11
而 Windows 的環境, 其圖形座標系統,Y 軸是顛倒的, 如下圖 : 原點 (0,0) X Y Windows 圖形環境座標系統 14-12
它的原點是位於視窗 Form 的左上角, 即圖所示 實際 Form 的座標系統 14-13
[ 範例 ] 將原先的繪圖圖形, 改變其顏色與樣式, 例如加粗 Step 1: 參考下列程式 Public Class Form1 Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint Dim d = Me.CreateGraphics() Dim b1 = New Pen(Color.Black, 4) d.drawrectangle(b1, 200, 30, 80, 60) Dim b2 = New Pen(Color.Blue, 4) d.drawarc(b2, 30, 10, 100, 190, 45, 150) End Sub End Class [ 程式說明 ] 1.Pen ( Color.Black,4 ) 對照 Pen ( 黑色, 畫筆寬度為 4 ) 14-14
Step 2: 實際程式畫面對照, 如圖所示 Step 3: 執行程式畫面, 如圖所示 14-15
[ 範例 ] 設計一個圖形動畫, 由左至右移動 Step 1: 設計如下圖的 Form1 表單 建立 Form1 表單 14-16
Step 2: 參考下列程式 Public Class Form1 Dim i As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Timer1.Enabled = True Timer1.Interval = 100 Button1.Enabled = False Button2.Enabled = True End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Me.Refresh() Dim d = Me.CreateGraphics() Dim b1 = New Pen(Color.Red, 6) If i <> Me.ClientSize.Width Then i = i + 1 d.drawrectangle(b1, i + 10, 30, 60, 60) b1.dispose() Else i = 0 End If End Sub 14-17
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Timer1.Enabled = False Button1.Text = " 動畫繼續 " Button1.Enabled = True Button2.Enabled = False End Sub End Class [ 程式說明 ] 1. 建立 Timer 物件, 將動畫程式寫入 Timer1_Tick 程序內 2.Refresh( ) 為清除上個圖形 14-18
Step 3: 實際程式畫面, 如圖所示 實際程式畫面 14-19
Step 4: 開始執行程式, 如圖一所示 Step 5: 按下動畫開始鈕, 如圖二所示 Step 6: 動畫正在向右移動, 我們可以按下動畫暫停鈕, 進行動畫暫停, 如圖三所示 圖一 : 開始執行程式圖二 : 按下動畫開始鈕圖三 : 動畫暫停 14-20
Step 7: 按下動畫繼續鈕後, 動畫又開始移動, 如圖一所示 Step 8: 動畫正在移動, 如圖二所示 Step 9: 動畫移至視窗右邊, 愈來愈小, 如圖三所示 圖一 : 按下動畫繼續鈕圖二 : 動畫正在移動圖三 : 動畫愈來愈小 14-21
Step 10: 動畫快要不見, 如圖一所示 Step 11: 動畫又從左邊移進來, 有連續的感覺, 如圖二所示 圖一 : 動畫快要不見了 圖二 : 連續動畫的感覺 14-22