Поделиться через


Графика для пользователей 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 начальной и конечной точек как аргументы.

9dtfzwyx.alert_note(ru-ru,VS.90).gifПримечание.

В 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 для определения внешнего вида линии.

9dtfzwyx.alert_note(ru-ru,VS.90).gifПримечание.

В 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 верхнего левого угла окружающего прямоугольника и значение ширины и высоты как аргументы.

9dtfzwyx.alert_note(ru-ru,VS.90).gifПримечание.

В 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.

9dtfzwyx.alert_note(ru-ru,VS.90).gifПримечание.

В 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.

9dtfzwyx.alert_note(ru-ru,VS.90).gifПримечание.

В 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)

Приступая к программированию графики

Управляемый код GDI+

Использование управляемых графических классов