다음을 통해 공유


Visual Basic 6.0 사용자를 위한 그래픽

업데이트: 2007년 11월

Visual Basic 6.0의 경우 다양한 그래픽 메서드와 속성을 사용하여 Form이나 PictureBox 컨트롤에서 그래픽을 그릴 수 있습니다. Visual Basic 6.0의 그래픽은 Windows GDI(그래픽 장치 인터페이스) API를 기반으로 합니다.

Visual Basic 2008에서는 GDI+ API를 캡슐화하는 System.Drawing 네임스페이스가 그래픽을 제공합니다. GDI+는 Visual Basic 6.0의 그래픽 기능을 토대로 확장된 것이지만 메서드가 호환되지는 않습니다.

개념적 차이

Visual Basic 6.0에서는 그래픽 메서드가 Form 개체와 PictureBox 컨트롤에만 적용됩니다.

Visual Basic 2008에서는 그래픽 메서드가 폼에 적용되고 PictureBox, PanelGroupBox 컨트롤을 포함하여 Paint 이벤트를 지원하는 모든 컨트롤에 적용됩니다. 또한 ListView, TreeViewButton 컨트롤을 포함하여 OwnerDraw 속성을 지원하는 모든 컨트롤에도 적용됩니다.

AutoRedraw 속성

Visual Basic 6.0에서는 모든 이벤트 프로시저에서 그래픽 메서드를 호출할 수 있으며 AutoRedraw 속성을 사용하면 Paint 이외의 이벤트에서 그래픽 메서드를 호출한 경우 그래픽을 유지할 수 있습니다.

Visual Basic 2008에서는 Paint 이벤트 프로시저에서만 그래픽 메서드를 호출해야 합니다. 소유자가 그린 일부 컨트롤의 경우에는 다양한 Draw 이벤트 프로시저(DrawItem, DrawSubItem 등)에서만 그래픽 메서드를 호출해야 합니다. Paint 및 Draw 이벤트에서 그래픽을 자동으로 유지하기 때문에 AutoRedraw 속성은 더 이상 지원되지 않고 필요하지도 않습니다.

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에서는 DrawLine 메서드 중 하나에 사용되는 System.Drawing.Pen 클래스의 DashStyle 속성을 설정하여 선 모양을 제어합니다. 선 두께는 이 속성과 관련이 없습니다.

DrawWidth 속성

Visual Basic 6.0에서는 DrawWidth 속성이 선 두께를 픽셀 단위로 결정합니다. 일반적으로 DrawWidth 속성은 그래픽 메서드를 수행하기 전에 설정됩니다.

Visual Basic 2008에서는 System.Drawing.Pen 컨트롤의 Pen.Width 속성이 선 두께를 결정합니다. Pen을 만들 때 또는 Pen을 만든 후에 Pen.Width를 설정하여 Width 속성을 매개 변수로 설정할 수 있습니다. Pen.Width 속성을 지정하지 않으면 기본값인 1픽셀이 사용됩니다.

Image 속성

Visual Basic 6.0에서는 폼 또는 PictureBox 컨트롤의 Image 속성에서 비트맵에 대한 핸들을 반환합니다. 반환된 핸들은 Picture 속성에 할당하거나 Windows API 호출에 전달할 값으로 사용할 수 있습니다.

Visual Basic 2008에서는 비트맵에 더 이상 핸들이 없으므로 실제 비트맵 자체가 Bitmap 형식의 개체로 전달됩니다. 전달된 Bitmap 컨트롤은 PictureBox 컨트롤의 Image속성에 할당할 수 있지만 Windows API 호출에는 전달할 수 없습니다.

Line 메서드

Visual Basic 6.0에서 Line 메서드는 선택적 인수인 B와 함께 왼쪽 위 및 아래쪽 좌표를 지정하여 사각형을 그리는 데 사용됩니다. FillColor 속성은 사각형을 단색으로 채우는 데 사용되고 FillStyle 속성은 교차 무늬로 채우는 데 사용됩니다.

Visual Basic 2008에서 DrawRectangles 메서드는 사각형의 테두리를 그리는 데 사용되고 FillRectangle 메서드는 사각형을 채우는 데 사용됩니다. FillRectangle에서는 Brush 개체를 매개 변수로 사용합니다. FillColor 속성은 SolidBrush로 대체되고 FillStyle 속성은 HatchBrush 클래스 멤버로 대체되었습니다.

Point 메서드

Visual Basic 6.0에서 폼 또는 PictureBox 컨트롤의 Point 메서드는 지정된 위치의 픽셀에 대한 색상 값을 반환하는 데 사용됩니다. Point 메서드는 그림이 포함되지 않은 폼이나 컨트롤에 사용할 수 있지만 일반적으로 Picture 속성에 할당된 비트맵에서 색을 검색하는 데 주로 사용됩니다.

Visual Basic 2008에는 Point 메서드가 더 이상 존재하지 않습니다. M:System.Drawing.Bitmap.GetPixel(System.Int32,System.Int32) 메서드를 사용하면 비트맵에서 색상 값을 검색할 수 있습니다. 그림이 포함되지 않은 폼이나 컨트롤의 경우에는 BackColor 속성을 쿼리할 수 있습니다.

Visual Basic 6.0에서는 Print 메서드를 사용하여 폼 또는 PictureBox 컨트롤에 텍스트를 표시할 수 있습니다. 텍스트를 표시하는 데 사용되는 글꼴은 폼이나 컨트롤의 Font 속성에 의해 결정되고 색은 ForeColor 속성에 의해 결정됩니다. Print 메서드에서는 텍스트 위치를 제어할 수 없으며 텍스트를 가로로만 표시할 수 있습니다.

Visual Basic 2008에서는 텍스트를 표시하는 데 DrawString 메서드가 사용됩니다. 글꼴은 Font 개체에 의해 결정되고 색은 Brush 개체에 의해 결정됩니다. 두 개체 모두 DrawString 메서드에 매개 변수로 전달됩니다. DrawString 메서드에는 텍스트의 시작 위치를 결정하는 X 및 Y 매개 변수도 포함되어 있습니다. 또한 텍스트를 세로로 표시할 수 있도록 StringFormat 개체를 사용하는 선택적 Format 매개 변수도 포함되어 있습니다.

PSet 메서드

Visual Basic 6.0에서는 PSet 메서드를 사용하여 폼 또는 PictureBox 컨트롤의 픽셀 색을 변경할 수 있습니다. DrawWidth 속성을 1보다 큰 값으로 설정하면 PSet 메서드에서 채워진 원을 그립니다. 선택적 매개 변수를 사용하면 색을 지정할 수 있습니다. 이를 생략하면 ForeColor가 사용됩니다.

Visual Basic 2008에는 PSet 메서드에 해당하는 요소가 없습니다. 폼 또는 PictureBox 컨트롤의 단일 픽셀 색을 변경하려면 DrawEllipse 메서드를 사용하여 높이와 너비가 각각 1픽셀인 원을 그립니다. DrawWidth가 1보다 큰 경우에 PSet의 기능을 복제하려면 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 예제에서는 Pens 개체의 Width 속성을 사용합니다.

' 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 메서드와 함께 사용합니다. B 매개 변수로 Line 메서드를 호출하면 사각형을 그릴 수 있습니다.

Visual Basic 2008 예제에서는 Brush 개체를 인수로 사용하는 Graphics.FillRectangle 메서드를 사용하고 Graphics.Rectangle 메서드를 사용하여 윤곽선을 그립니다. 이 예제에서는 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 예제에서는 SizeF 구조체를 반환하는 MeasureString 메서드를 사용합니다.

' 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 예제에서는 Height 및 Width 매개 변수를 1로 설정한 상태에서 DrawEllipse 메서드를 사용합니다.

참고    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(pen, x, y, width, height)

CurrentY 속성

다양한 그래픽 메서드의 y 매개 변수. 예: DrawRectangle(pen, x, y, width, height)

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+ 관리 코드 정보

관리되는 그래픽 클래스 사용