Графика для пользователей Visual Basic 6.0
Обновлен: Ноябрь 2007
В Visual Basic 6.0 для рисования в Form или в элементе управления PictureBox используются различные графические методы и свойства. Графика в Visual Basic 6.0 основана на API интерфейса графических устройств (GDI) Windows.
В Visual Basic 2008 графика обеспечивается пространством имен System.Drawing, которое инкапсулирует API GDI+. GDI+ расширяет графические возможности Visual Basic 6.0, однако методы несовместимы.
Концептуальные различия
В Visual Basic 6.0 графические методы применяются только к объекту Form и элементу управления PictureBox.
В Visual Basic 2008 графические методы применяются к формам, а также к любому элементу управления, который поддерживает событие Paint, включая элементы управления PictureBox, Panel и GroupBox. Кроме того, графические методы применяются к любым элементам управления, которые поддерживают свойство OwnerDraw, включая элементы управления ListView, TreeView и Button.
Свойство AutoRedraw
В Visual Basic 6.0 графические методы могут быть вызваны из любой процедуры обработки события; свойство AutoRedraw используется для сохранения графики, когда графические методы вызываются из события, отличного от события Paint.
В Visual Basic 2008 графические методы должны вызываться только из процедуры обработки события Paint или, если используются элементы управления, нарисованные пользователем, — из различных процедур обработки события Draw (DrawItem, DrawSubItem и т. д.). Свойство AutoRedraw больше не поддерживается и не требуется, так как события Paint и Draw автоматически сохраняют графику.
Свойство ClipControls
В Visual Basic 6.0 свойство ClipControls используется для управления рисованием формы или элемента управления. При установке значения True для рисования предоставляются только новые области, что теоретически улучшает производительность.
В Visual Basic 2008 нет эквивалента свойства ClipControls; улучшение производительности в GDI+ и современные видеоадаптеры делают его ненужным.
Свойство DrawMode
В Visual Basic 6.0 свойство DrawMode управляет цветом графических объектов, когда один шаблон рисуется поверх другого. Это свойство поддерживает только монохромные или с низким разрешением (256 цветов или меньше) дисплеи.
В Visual Basic 2008 нет эквивалента свойства DrawMode; оно больше не требуется для современных дисплеев.
Свойство DrawStyle
В Visual Basic 6.0 свойство DrawStyle управляет внешним видом проведенной линии с помощью метода Line. Если значение свойства DrawWidth больше 1, свойство DrawStyle не действует, и линия всегда будет сплошной.
В Visual Basic 2008 внешний вид линии управляется установкой свойства DashStyle класса System.Drawing.Pen, используемого одним из методов DrawLine; ширина линии не зависит от этого свойства.
Свойство DrawWidth
В Visual Basic 6.0 свойство DrawWidth определяет толщину линии в точках; свойство DrawWidth, как правило, задается перед выполнением графического метода.
В Visual Basic 2008 толщину линии определяет свойство Pen.Width элемента управления System.Drawing.Pen; свойство Width можно задать как параметр при создании инструмента Pen или задав Pen.Width после создания Pen. Если свойство Pen.Width не указано, по умолчанию используется значение 1 точка.
Свойство Image
В Visual Basic 6.0 свойство Image формы или элемента управления PictureBox возвращает маркер растровому изображению; маркер может быть назначен свойству Picture или использоваться как значение для передачи в вызовы Windows API.
В Visual Basic 2008 растровые изображения более не имеют маркеров; фактическое растровое изображение само передается как объект типа Bitmap. Элемент управления Bitmap может быть назначен свойству Image элемента управления PictureBox, но он не может быть передан в вызовы Windows API.
Метод Line
В Visual Basic 6.0 метод Line используется для рисования прямоугольника с помощью указания верхней левой и нижней координат с дополнительным аргументом B. Свойство FillColor используется для заполнения прямоугольника сплошным цветом, а свойство FillStyle заполняет прямоугольник штриховой заливкой.
В Visual Basic 2008 метод DrawRectangles используется для рисования границы прямоугольника, а метод FillRectangle — для его заполнения. Метод FillRectangle принимает объект Brush как параметр. Объект SolidBrush заменяет свойство FillColor, и члены класса HatchBrush заменяют свойство FillStyle.
Метод Point
В Visual Basic 6.0 метод Point формы или элемента управления PictureBox используется для возвращения значения цвета для точки в указанном месте. Хотя метод Point может использоваться для форм или элементов управления, которые не содержат рисунка, чаще он применяется для извлечения цвета из растрового изображения, назначенного свойству Picture.
В Visual Basic 2008 метод Point более не существует. Для извлечения значения цвета из растрового изображения можно использовать метод M:System.Drawing.Bitmap.GetPixel(System.Int32,System.Int32). Для форм и элементов управления, которые не содержат рисунка, можно запросить свойство BackColor.
Метод Print
В Visual Basic 6.0 метод Print используется для отображения текста в форме или элементе управления PictureBox. Шрифт, используемый для отображения текста, определяется свойствами Font формы или элемента управления, а цвет определяется свойством ForeColor. Метод Print не поддерживает управление расположением текста и отображает текст только горизонтально.
В Visual Basic 2008 метод DrawString используется для отображения текста. Шрифт определяется объектом Font, а цвет — объектом Brush; и тот и другой передаются как параметры в метод DrawString. Метод DrawString также имеет параметры X и Y, определяющие начальное расположение текста. Имеется также дополнительный параметр Format, который принимает объект StringFormat, позволяющий отображать текст вертикально.
Метод PSet
В Visual Basic 6.0 метод PSet используется для изменения цвета точки в форме или элементе управления PictureBox. Если значение свойства DrawWidth меньше 1, метод PSet рисует заполненный круг. Дополнительный параметр используется для определения цвета; если он опущен, используется параметр ForeColor .
В Visual Basic 2008 нет эквивалента методу PSet. Чтобы изменить цвет одной точки в форме или элементе управления PictureBox, используйте метод DrawEllipse, чтобы нарисовать круг высотой и шириной в 1 точку. Чтобы продублировать функциональные возможности метода PSet, когда значение DrawWidth больше 1, используйте метод FillEllipse.
Изменения кода для графики
Следующие примеры кода иллюстрируют различия в методах программирования между Visual Basic 6.0 и Visual Basic 2008.
Рисование простой линии
В следующем коде показано рисование линии в форме во время выполнения. В примере Visual Basic 6.0 используется метод Line; он принимает координаты X и Y начальной и конечной точек и дополнительно цвет в качестве аргумента. В примере Visual Basic 2008 используется метод DrawLine, который принимает объект Pens и координаты X и Y начальной и конечной точек как аргументы.
Примечание. |
---|
В Visual Basic 6.0 единицей измерения по умолчанию являются твипы; в Visual Basic 2008 — точки. |
' 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
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
Рисование пунктирной линии
В следующем коде показано рисование пунктирной линии в форме во время выполнения. В примере Visual Basic 6.0 внешний вид линии определяет свойство DrawStyle. В примере Visual Basic 2008 используется объект Pen, задающий свойство DashStyle для определения внешнего вида линии.
Примечание. |
---|
В Visual Basic 6.0 единицей измерения по умолчанию являются твипы; в Visual Basic 2008 — точки. |
' 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
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
Управление толщиной линии
В следующем коде показано рисование линий различной толщины в форме во время выполнения. В примере Visual Basic 6.0 используется свойство DrawWidth. В примере Visual Basic 2008 используется свойство Width объекта Pens.
' 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
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
Рисование круга
В следующем коде показано рисование круга в форме во время выполнения. В примере Visual Basic 6.0 используется метод Circle; он принимает координаты X и Y центральной точки, значение радиуса и, дополнительно, цвета как аргументы. В примере Visual Basic 2008 используется метод DrawEllipse, который принимает объект Pen, координаты X и Y верхнего левого угла окружающего прямоугольника и значение ширины и высоты как аргументы.
Примечание. |
---|
В Visual Basic 6.0 единицей измерения по умолчанию являются твипы; в Visual Basic 2008 — точки. |
' Visual Basic 6.0
Private Sub Form_Paint()
' Draw a 1000 twip diameter red circle
Circle (500, 500), 500, vbRed
End Sub
' Visual Basic
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
Рисование закрашенного прямоугольника
В следующем коде показано рисование двух прямоугольников в форме во время выполнения, один из которых заполнен сплошной заливкой, а другой — перекрестной штриховкой. В примере Visual Basic 6.0 используются свойства FillColor и FillStyle с методом Line. Рисование прямоугольника выполняется вызовом метода Line с параметром B.
В примере Visual Basic 2008 для рисования контура используется метод Graphics.Rectangle и метод Graphics.FillRectangle, который принимает объект Brush как аргумент. В этом примере используются оба элемента управления SolidBrush и HatchBrush.
Примечание. |
---|
В Visual Basic 6.0 единицей измерения по умолчанию являются твипы; в Visual Basic 2008 — точки. |
' 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
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
Отображение изображения в форме
В следующем коде показаны графические методы для отображения изображения в форме во время выполнения. В примере Visual Basic 6.0 используется метод PaintPicture. В примере Visual Basic 2008 используется метод DrawImage.
' 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
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
Отображение текста в форме
В следующем коде показаны графические методы для отображения текстовой строки в форме во время выполнения. В примере Visual Basic 6.0 используется метод Print. В примере Visual Basic 2008 используется метод DrawString.
' 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
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
Определение высоты и ширины строки
В следующем коде показаны графические методы для определения размера строки в форме во время выполнения с последующим рисованием прямоугольника вокруг нее. В примере Visual Basic 6.0 используются методы TextHeight и TextWidth. В примере Visual Basic 2008 используется метод MeasureString, который возвращает структуру SizeF.
' 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
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
Рисование одной точки
В следующем примере показаны графические методы для изменения цвета одной точки в форме во время выполнения. В примере Visual Basic 6.0 используется метод PSet. В примере Visual Basic 2008 используется метод DrawEllipse с параметрами Height и Width с установленным значением 1.
Примечание. В Visual Basic 6.0 единицей измерения по умолчанию являются твипы; в Visual Basic 2008 — точки.
' Visual Basic 6.0
Private Sub Form_Paint()
Me.DrawWidth = 1
PSet (1000, 1000), vbRed
End Sub
' Visual Basic
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
Определение цвета одной точки
В следующем коде показаны графические методы для определения цвета точки в указанном месте изображения в форме во время выполнения с последующим рисованием прямоугольника, закрашенного этим цветом. В примере Visual Basic 6.0 для извлечения значения цвета используется метод Point. В примере Visual Basic 2008 используется метод GetPixel.
Примечание. |
---|
В Visual Basic 6.0 единицей измерения по умолчанию являются твипы; в Visual Basic 2008 — точки. |
' 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
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 2008.
Visual Basic 6.0 |
Эквивалент Visual Basic 2008 |
---|---|
Свойство AutoRedraw |
Новая реализация. Для сохранения графики поместите графические методы в событие Paint. |
Метод Circle |
Метод DrawEllipse |
Свойство ClipControls |
Новая реализация. Свойство ClipControls больше не требуется. |
Метод Cls |
Метод Clear |
Свойство CurrentX |
Параметр x различных графических методов. Например, DrawRectangle (перо, x, y, ширина, высота) |
Свойство CurrentY |
Параметр y различных графических методов. Например, DrawRectangle (перо, x, y, ширина, высота) |
Свойство DrawMode |
Новая реализация. Свойство DrawMode больше не требуется. |
Свойство DrawStyle |
Свойство DashStyle |
Свойство DrawWidth |
Свойство Width |
Свойство FillColor |
Объект SolidBrush |
Свойство FillStyle |
Объект HatchBrush |
Свойство HasDC |
Новая реализация. Контекст устройства больше не требуется для интерфейса GDI+. |
Свойство HDC |
Новая реализация. Контекст устройства больше не требуется для интерфейса GDI+. |
Свойство Image |
Новая реализация. |
Метод Line |
Метод DrawLine |
Метод PaintPicture |
Метод DrawImage |
Метод Point |
Прямого эквивалента нет. Для растровых изображений используйте Bitmap.GetPixel. Для форм и элементов управления используйте свойство BackColor. |
Метод Print |
Метод DrawString |
Метод Pset |
Методы DrawEllipse, FillEllipse |
Свойства TextHeight, TextWidth |
Метод MeasureString |
Замечания по обновлению
При обновлении приложения Visual Basic 6.0 до Visual Basic 2008 графические методы не обновляются, и в код вставляются предупреждения. Из-за различий между GDI и GDI+ существующие графические коды должны быть переписаны.
См. также
Задачи
Пример пользовательской отрисовки элемента управления
Другие ресурсы
Общие сведения о графике (Windows Forms)