在 Visual Basic 6.0 中,可以使用多種圖形方法和屬性在 Form 或 PictureBox 控件上繪制圖形。Visual Basic 6.0 中的圖形是以 Windows 圖形設(shè)備接口 (GDI) API 為基礎(chǔ)的。
在 Visual Basic 2005 中,圖形由封裝 GDI+ API 的
在 Visual Basic 6.0 中,圖形方法僅應(yīng)用于 Form 對象和 PictureBox 控件。
在 Visual Basic 2005 中,圖形方法可應(yīng)用于窗體和支持
在 Visual Basic 6.0 中,圖形方法可從任何事件過程調(diào)用;AutoRedraw 屬性用于當(dāng)從 Paint 事件以外的事件調(diào)用圖形方法時保持圖形。
在 Visual Basic 2005 中,圖形方法應(yīng)僅從 Paint 事件過程調(diào)用,或?qū)τ谝恍┧姓呙枋龅目丶?,從各種 Draw 事件過程(
在 Visual Basic 6.0 中,ClipControls 屬性用于控制窗體或控件的繪制。設(shè)置為 True 時,僅重新繪制新公開的區(qū)域,這從理論上來說可提高性能。
Visual Basic 2005 中沒有 ClipControls 屬性的等效項;GDI+ 的性能增強(qiáng)和最新的視頻適配器使該屬性不再是必需的。
在 Visual Basic 6.0 中,DrawMode 屬性控制在一個圖案上繪制另一個圖案時圖形對象的顏色。此屬性僅影響單色或低分辨率顯示器(256 色或更低)。
DrawMode 屬性在 Visual Basic 2005 中沒有等效項;當(dāng)前的顯示器不再需要此屬性。
在 Visual Basic 6.0 中,DrawStyle 屬性控制使用 Line 方法繪制的線的外觀。如果 DrawWidth 屬性設(shè)置為大于 1 的值,則 DrawStyle 屬性不起作用,線將始終為實(shí)線。
在 Visual Basic 2005 中,通過設(shè)置 DrawLine 方法使用的 System.Drawing.Pen 類的
在 Visual Basic 6.0 中,DrawWidth 屬性決定線的粗細(xì)(以像素為單位);DrawWidth 屬性通常在執(zhí)行圖形方法前設(shè)置。
在 Visual Basic 2005 中,System.Drawing.Pen 控件的 Pen.Width 屬性決定線的粗細(xì);可以在創(chuàng)建 Pen 時作為參數(shù)設(shè)置 Width 屬性,或在創(chuàng)建 Pen 后設(shè)置 Pen.Width。如果未指定 Pen.Width 屬性,則默認(rèn)值為 1 個像素。
在 Visual Basic 6.0 中,窗體或 PictureBox 控件的 Image 屬性返回位圖的句柄;該句柄可賦給 Picture 屬性,或者作為一個值傳遞給 Windows API 調(diào)用。
在 Visual Basic 2005 中,位圖不再具有句柄;實(shí)際位圖本身作為
在 Visual Basic 6.0 中,通過指定左上角和右下角坐標(biāo)以及可選參數(shù) B
,可使用Line 方法來繪制矩形。FillColor 屬性用于以某種純色填充矩形,而 FillStyle 屬性以交叉線圖案填充矩形。
在 Visual Basic 2005 中,
在 Visual Basic 6.0 中,窗體或 PictureBox 控件的 Point 方法用于返回位于指定點(diǎn)的像素的顏色值。盡管 Point 方法可用于不包含圖片的窗體或控件,但它最常用于從賦給 Picture 屬性的某個位圖中檢索顏色。
在 Visual Basic 2005 中,Point 方法不再存在??梢允褂?M:System.Drawing.Bitmap.GetPixel(System.Int32,System.Int32) 方法從位圖檢索顏色值。對于不包含圖片的窗體或控件,可以查詢
在 Visual Basic 6.0 中,Print 方法用于在窗體或 PictureBox 控件上顯示文本。用于顯示文本的字體由窗體或控件的 Font 屬性決定,顏色由 ForeColor 屬性決定。Print 方法不提供對文本位置的控制,只能水平顯示文本。
在 Visual Basic 2005 中,使用 DrawString 方法顯示文本。字體由
在 Visual Basic 6.0 中,PSet 方法用于更改窗體或 PictureBox 控件上的像素顏色。如果 DrawWidth 屬性設(shè)置為大于 1 的值,PSet 方法將繪制實(shí)心圓。如果使用了被省略的 ForeColor ,可通過另一個可選參數(shù)指定顏色。
在 Visual Basic 2005 中,沒有 PSet 方法的等效項。若要更改窗體或 PictureBox 控件上單個像素的顏色,可使用 DrawEllipse 方法繪制一個高度和寬度都為 1 個像素的圓。若要復(fù)制 PSet 在 DrawWidth 大于 1 時的功能,請使用 FillEllipse 方法。
下面的代碼示例演示 Visual Basic 6.0 和 Visual Basic 2005 在編碼方法上的不同之處。
下面的代碼演示如何在運(yùn)行時在窗體上繪制線條。Visual Basic 6.0 示例使用 Line 方法;它以起始點(diǎn)和結(jié)束點(diǎn)的 X 和 Y 坐標(biāo)以及顏色(可選)作為參數(shù)。Visual Basic 2005 示例使用 DrawLine 方法,該方法以
注意 |
---|
在 Visual Basic 6.0 中,默認(rèn)度量單位是緹數(shù);在 Visual Basic 2005 中,默認(rèn)度量單位是像素。 |
復(fù)制代碼 | |
---|---|
' Visual Basic 6.0 Private Sub Form_Paint() ' Draw a solid black line 200 twips from the top of the form. Line (0, 200) - (ScaleWidth, 200), vbBlack End Sub |
Visual Basic | 復(fù)制代碼 |
---|---|
' Visual Basic 2005 Private Sub Form1_Paint(ByVal sender As Object, ByVal e _ As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint ' Draw a solid black line 25 pixels from the top of the form. e.Graphics.DrawLine(Pens.Black, 0, 25, Me.Width, 25) End Sub |
下面的代碼演示如何在運(yùn)行時在窗體上繪制虛線。在 Visual Basic 6.0 示例中,DrawStyle 屬性決定線條的外觀。Visual Basic 2005 示例使用
注意 |
---|
在 Visual Basic 6.0 中,默認(rèn)度量單位是緹數(shù);在 Visual Basic 2005 中,默認(rèn)度量單位是像素。 |
復(fù)制代碼 | |
---|---|
' Visual Basic 6.0 Private Sub Form_Paint() ' Draw a dotted line 200 twips from the top of the form. Me.DrawStyle = vbDot Line (0, 200) - (ScaleWidth, 200), vbBlack End Sub |
Visual Basic | 復(fù)制代碼 |
---|---|
' Visual Basic 2005 Private Sub Form1_Paint1(ByVal sender As Object, ByVal e As _ System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint ' Draw a dotted black line 25 pixels from the top of the form. Dim LPen As New System.Drawing.Pen(System.Drawing.Color.Black) LPen.DashStyle = Drawing2D.DashStyle.Dot e.Graphics.DrawLine(LPen, 0, 25, Me.Width, 25) End Sub |
下面的代碼演示如何在運(yùn)行時在窗體上繪制不同粗細(xì)的線條。Visual Basic 6.0 示例使用 DrawWidth 屬性。Visual Basic 2005 示例使用 Pens 對象的 Width 屬性。
復(fù)制代碼 | |
---|---|
' Visual Basic 6.0 Private Sub Form_Paint() ' Draw a line with a thickness of 1 pixel. DrawWidth = 1 Line (0, 200)-(ScaleWidth, 200), vbBlack ' Draw a line with a thickness of 5 pixels. DrawWidth = 5 Line (0, 400)-(ScaleWidth, 400), vbBlack ' Draw a line with a thickness of 10 pixels. DrawWidth = 10 Line (0, 600)-(ScaleWidth, 600), vbBlack End Sub |
Visual Basic | 復(fù)制代碼 |
---|---|
' Visual Basic 2005 Private Sub Form1_Paint2(ByVal sender As Object, ByVal e As _ System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint ' Draw a line with a thickness of 1 pixel. Dim TPen As New System.Drawing.Pen(System.Drawing.Color.Black, 1) e.Graphics.DrawLine(TPen, 0, 25, Me.Width, 25) ' Draw a line with a thickness of 5 pixels. TPen.Width = 5 e.Graphics.DrawLine(TPen, 0, 50, Me.Width, 50) ' Draw a line with a thickness of 10 pixels. TPen.Width = 10 e.Graphics.DrawLine(TPen, 0, 75, Me.Width, 75) End Sub |
下面的代碼演示如何在運(yùn)行時在窗體上繪制圓。在 Visual Basic 6.0 示例中使用 Circle 方法;它以中心點(diǎn)的 X 和 Y 坐標(biāo)、半徑以及顏色(可選)作為參數(shù)。Visual Basic 2005 示例使用 DrawEllipse 方法,該方法以 Pen 對象、邊界矩形左上角的 X 和 Y 坐標(biāo)以及寬度和高度作為參數(shù)。
注意 |
---|
在 Visual Basic 6.0 中,默認(rèn)度量單位是緹數(shù);在 Visual Basic 2005 中,默認(rèn)度量單位是像素。 |
復(fù)制代碼 | |
---|---|
' Visual Basic 6.0 Private Sub Form_Paint() ' Draw a 1000 twip diameter red circle Circle (500, 500), 500, vbRed End Sub |
Visual Basic | 復(fù)制代碼 |
---|---|
' Visual Basic 2005 Private Sub Form1_Paint3(ByVal sender As Object, ByVal e As _ System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint ' Draw a 70 pixel diameter red circle. e.Graphics.DrawEllipse(Pens.Red, 0, 0, 70, 70) End Sub |
下面的代碼演示如何在運(yùn)行時在窗體上繪制兩個矩形,一個以純色填充,另一個以交叉線圖案填充。在 Visual Basic 6.0 示例中,FillColor 和 FillStyle 屬性與 Line 方法一起使用。使用 B 參數(shù)調(diào)用 Line 方法繪制矩形。
Visual Basic 2005 示例使用 Graphics.Rectangle 方法繪制輪廓,以及以 Brush 對象作為參數(shù)的 Graphics.FillRectangle 方法。本示例使用 SolidBrush 和 HatchBrush 兩個控件。
注意 |
---|
在 Visual Basic 6.0 中,默認(rèn)度量單位是緹數(shù);在 Visual Basic 2005 中,默認(rèn)度量單位是像素。 |
復(fù)制代碼 | |
---|---|
' Visual Basic 6.0 Private Sub Form_Paint() ' Draw a solid red rectangle. FillColor = vbRed FillStyle = vbSolid Line (10, 10)- (1000, 500), vbRed, B ' Draw a rectangle filled with a crosshatch pattern. FillColor = vbBlack FillStyle = vbCross Line (10, 500)- (1000, 1000), vbBlack, B End Sub |
Visual Basic | 復(fù)制代碼 |
---|---|
' Visual Basic 2005 Private Sub Form1_Paint4(ByVal sender As Object, ByVal e As _ System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint ' Draw a solid red rectangle. Dim SBrush As New System.Drawing.SolidBrush _ (System.Drawing.Color.Red) e.Graphics.DrawRectangle(Pens.Red, 2, 2, 70, 40) e.Graphics.FillRectangle(SBrush, 2, 2, 70, 40) ' Draw a rectangle filled with a crosshatch pattern. Dim HBrush As New System.Drawing.Drawing2D.HatchBrush( _ System.Drawing.Drawing2D.HatchStyle.Cross, _ System.Drawing.Color.Black, System.Drawing.Color.Transparent) e.Graphics.DrawRectangle(Pens.Black, 2, 40, 70, 40) e.Graphics.FillRectangle(HBrush, 2, 40, 70, 40) End Sub |
下面的代碼演示運(yùn)行時在窗體上顯示圖像的圖形方法。Visual Basic 6.0 示例使用 PaintPicture 方法。Visual Basic 2005 示例使用 DrawImage 方法。
復(fù)制代碼 | |
---|---|
' Visual Basic 6.0 Private Sub Form_Paint() ' Create a stdPicture object. Dim Pict1 As New stdPicture Pict1 = LoadPicture("C:\Windows\Greenstone.bmp") PaintPicture Pict1, 0, 0 End Sub |
Visual Basic | 復(fù)制代碼 |
---|---|
' Visual Basic 2005 Private Sub Form1_Paint5(ByVal sender As Object, ByVal e As _ System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint ' Create a Bitmap object. Dim Pict1 As New Bitmap("C:\Windows\Greenstone.bmp") e.Graphics.DrawImage(Pict1, 0, 0) End Sub |
下面的代碼演示運(yùn)行時在窗體上顯示文本字符串的圖形方法。Visual Basic 6.0 示例使用 Print 方法。Visual Basic 2005 示例使用 DrawString 方法。
復(fù)制代碼 | |
---|---|
' Visual Basic 6.0 Private Sub Form_Paint() Me.Font.Size = 24 Me.Font.Bold = True Me.ForeColor = vbRed Print "Hello World!" End Sub |
Visual Basic | 復(fù)制代碼 |
---|---|
' Visual Basic 2005 Private Sub Form1_Paint6(ByVal sender As Object, ByVal e As _ System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint Dim TextFont As New System.Drawing.Font("Arial", 24, FontStyle.Bold) Dim TextBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red) e.Graphics.DrawString("Hello World!", TextFont, TextBrush, 10, 10) TextFont.Dispose() TextBrush.Dispose() End Sub |
下面的代碼演示運(yùn)行時決定窗體上的字符串大小,然后在周圍繪制矩形的圖形方法。Visual Basic 6.0 示例使用 TextHeight 和 TextWidth 方法。Visual Basic 2005 示例使用
復(fù)制代碼 | |
---|---|
' Visual Basic 6.0 Private Sub Form_Paint() Me.Font.Size = 24 Me.Font.Bold = True Me.ForeColor = vbRed Print "Hello World!" Line (0, 0)-(TextWidth("Hello World!"), _ TextHeight("Hello World!")), vbBlack, B End Sub |
Visual Basic | 復(fù)制代碼 |
---|---|
' Visual Basic 2005 Private Sub Form1_Paint7(ByVal sender As Object, ByVal e As _ System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint Dim TextFont As New System.Drawing.Font("Arial", 24, FontStyle.Bold) Dim TextBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red) e.Graphics.DrawString("Hello World!", TextFont, TextBrush, 10, 10) Dim TextSize As New System.Drawing.SizeF TextSize = e.Graphics.MeasureString("Hello World!", TextFont) e.Graphics.DrawRectangle(Pens.Black, 10, 10, TextSize.Width, TextSize.Height) TextFont.Dispose() TextBrush.Dispose() End Sub |
下面的示例演示運(yùn)行時更改窗體上單個像素顏色的圖形方法。Visual Basic 6.0 示例使用 PSet 方法。Visual Basic 2005 示例使用 DrawEllipse 方法,其 Height 和 Width 參數(shù)均設(shè)置為 1
。
注意 在 Visual Basic 6.0 中,默認(rèn)度量單位是緹數(shù);在 Visual Basic 2005 中,默認(rèn)度量單位是像素。
復(fù)制代碼 | |
---|---|
' Visual Basic 6.0 Private Sub Form_Paint() Me.DrawWidth = 1 PSet (1000, 1000), vbRed End Sub |
Visual Basic | 復(fù)制代碼 |
---|---|
' Visual Basic 2005 Private Sub Form1_Paint8(ByVal sender As Object, ByVal e As _ System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint e.Graphics.DrawEllipse(Pens.Red, 70, 70, 1, 1) End Sub |
下面的代碼演示在運(yùn)行時確定窗體上圖像中指定位置像素的顏色,然后以該顏色繪制矩形的圖形方法。Visual Basic 6.0 示例使用 Point 方法檢索顏色值。Visual Basic 2005 示例使用
注意 |
---|
在 Visual Basic 6.0 中,默認(rèn)度量單位是緹數(shù);在 Visual Basic 2005 中,默認(rèn)度量單位是像素。 |
復(fù)制代碼 | |
---|---|
' Visual Basic 6.0 Private Sub Form_Paint() Dim PixelColor As Long Picture1.Picture = LoadPicture("C:\Windows\Greenstone.bmp") PixelColor = Picture1.Point(10, 10) FillColor = PixelColor Line (0, 0)-(100, 500), PixelColor, B End Sub |
Visual Basic | 復(fù)制代碼 |
---|---|
' Visual Basic 2005 Private Sub Form1_Paint9(ByVal sender As Object, ByVal e As _ System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint Dim Pict1 As New Bitmap("C:\Windows\Greenstone.bmp") Picture1.Image = Pict1 Dim PixelColor As Color = Pict1.GetPixel(4, 4) Dim PixelBrush As New SolidBrush(PixelColor) e.Graphics.FillRectangle(PixelBrush, 0, 0, 100, 100) End Sub |
下表列出了 Visual Basic 6.0 圖形屬性和方法及它們在 Visual Basic 2005 中的等效項。
Visual Basic 6.0 | Visual Basic 2005 等效項 |
---|---|
AutoRedraw 屬性 | 新的實(shí)現(xiàn)。若要永久保存圖形,請在 Paint 事件中放入圖形方法。 |
Circle 方法 | DrawEllipse 方法 |
ClipControls 屬性 | 新的實(shí)現(xiàn)。ClipControls 屬性不再是必需的。 |
Cls 方法 | Clear 方法 |
CurrentX 屬性 | 各種圖形方法的 x 參數(shù)。例如, |
CurrentY 屬性 | 各種圖形方法的 y 參數(shù)。例如,DrawRectangle (pen, x, y, width, height) |
DrawMode 屬性 | 新的實(shí)現(xiàn)。DrawMode 屬性不再是必需的。 |
DrawStyle 屬性 | DashStyle 屬性 |
DrawWidth 屬性 | |
FillColor 屬性 | SolidBrush 對象 |
FillStyle 屬性 | HatchBrush 對象 |
HasDC 屬性 | 新的實(shí)現(xiàn)。GDI+ 不再需要設(shè)備上下文。 |
HDC 屬性 | 新的實(shí)現(xiàn)。GDI+ 不再需要設(shè)備上下文。 |
Image 屬性 | 新的實(shí)現(xiàn)。 |
Line 方法 | DrawLine 方法 |
PaintPicture 方法 | DrawImage 方法 |
Point 方法 | 無直接等效項。對于位圖,請使用 Bitmap.GetPixel。對于窗體或控件,請使用 |
Print 方法 | DrawString 方法 |
Pset 方法 | DrawEllipse、FillEllipse 方法 |
TextHeight、TextWidth 屬性 | MeasureString 方法 |
應(yīng)用程序從 Visual Basic 6.0 升級到 Visual Basic 2005 時,圖形方法并不升級,并會在代碼中插入警告。由于 GDI 和 GDI+ 之間的巨大差異,現(xiàn)有的所有圖形代碼都需要重寫。
聯(lián)系客服