2010-03-30 4 views
1

Какие методы GDI можно использовать для рисования синей формы, показанной на изображении ниже? Центр должен быть прозрачным.C# GDI Drawing2D help

alt text

ответ

1

Есть несколько способов, но вы, вероятно, захотите использовать следующие:

FillRectangle 
FillPolygon 
DrawLine 

, поскольку он выглядит как ваша форма может быть уменьшена до прямоугольника и два полигона, а затем изложено несколько строк ,

Вот очень простой и жестко закодированы пример того, что я имел в виду:

Private Sub Control_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) _ 
Handles MyBase.Paint 
    Dim g As Graphics = e.Graphics 

    g.FillRectangle(Brushes.Aqua, New Rectangle(10, 10, 10, 90)) 
    g.FillPolygon(Brushes.Aqua, New Point() { _ 
     New Point(10, 10), _ 
     New Point(20, 10), _ 
     New Point(40, 50), _ 
     New Point(30, 50)}) 
    g.FillPolygon(Brushes.Aqua, New Point() { _ 
     New Point(10, 100), _ 
     New Point(20, 100), _ 
     New Point(40, 50), _ 
     New Point(30, 50)}) 
    g.DrawLine(Pens.Black, New Point(10, 10), New Point(10, 100)) 
    g.DrawLine(Pens.Black, New Point(10, 100), New Point(20, 100)) 
    g.DrawLine(Pens.Black, New Point(20, 100), New Point(40, 50)) 
    g.DrawLine(Pens.Black, New Point(40, 50), New Point(20, 10)) 
    g.DrawLine(Pens.Black, New Point(20, 10), New Point(10, 10)) 

...

+0

Я думаю, что прямоугольник и многоугольник будут работать, я сделаю снимок. – Kevin

+0

@Kevin: добавлен пример кода для рисования, чтобы развернуть то, что я представлял. Обратите внимание, что он жестко закодирован и не мешает обрисовать внутренний треугольник. Сегодня мало времени. ;-) –

+0

Внутренние границы немного сложнее. – Kevin

1

Im предполагая GDI + здесь ака System.Drawing пространство имен.

Самое лучшее, что нужно сделать, это посмотреть на класс System.Drawing.Drawing2d.GraphicsPath:

http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.graphicspath.aspx

Вы должны убедиться, что вы закроете путь, чтобы получить полую эффект.

-1

Не было бы просто быть проще сделать это с помощью растрового изображения? Во всяком случае, это все равно :).