Программирование
Веб программирование

Рисование на форме с помощью GDI+ интерфейса

 
 

Привет всем интересующимся!  Здесь уже упоминалось о пространствах имен Vb.Net.  Рассмотрим пространство имен, позволяющее пользоваться графическими возможностями Vb.  Пространство имен System.Drawing обеспечивает доступ к функциональным возможностям графического интерфейса GDI+. GDI+ — это часть операционной системы Windows, предоставляющая средства для обработки двухмерной графики и рисунков, а так же многого другого. Интерфейс управляемых классов GDI+ является частью .NET Framework.  В данном уроке мы рассмотрим только класс   Graphics, который предоставляет методы рисования на устройстве отображения, в нашем случае это будет форма. Итак ,начнем.

  1. Создайте новый проект типа Windows Form.
  2. Разместите на форме проекта одну кнопку Button1 и два модуля NumericUpDown1 и NumericUpDown2. Разместить их можно произвольно, далее в коде мы поставим их в верхний правый угол программно.  Задайте свойство кнопки Button1.Text как СТАРТ.

Сформируем код, как показано ниже. В качестве примера демонстрации графических возможностей выбраны фигуры Лиссажу, хорошо известные всем из курса классической физики.  Это траектории частицы, испытывающей колебательные движения в двух взаимно перпендикулярных направлениях с различными частотами колебаний. Для построения нам потребуется всего лишь один метод класса Graphics, а именно .DrawLine(PenColor, xo, yo, x, y)- построение отрезка линии от точки с координатами (xo,yo) до точки (x,y), с цветом заданным в  PenColor.


Public Class Form1
    Dim x0, y0, x, y, xo, yo, i, w1, w2 As Decimal
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim GraphicsFun As System.Drawing.Graphics  ‘Задает объект класса Graphics
        GraphicsFun = Me.CreateGraphics  ‘Рисование на форме
        GraphicsFun.Clear(Color.Honeydew) ‘Очистка формы и заполнение ее цветом Honeydew
        Dim PenColor As New System.Drawing.Pen(System.Drawing.Color.Red) ‘Класс Pen(перо,цвет)
        x0 = 0.5 * Me.Width ‘ х-координата центра формы
        y0 = 0.5 * Me.Height ‘ у-координата центра формы
        w1 = NumericUpDown1.Value ‘Частота по вертикали
        w2 = NumericUpDown2.Value 'Частота по горизонтали
        For Me.i = 0 To 100 Step 0.1 ‘I – переменный параметр имеющий физический смысл времени
            x = x0 + 300 * Math.Cos(w1 * i) ‘х-координата кривой Лиссажу
            y = y0 + 300 * Math.Cos(w2 * i) ‘у-координата кривой Лиссажу
            If i = 0 Then ‘Это условие для задания начальной точки рисования
                xo = x
                yo = y
            End If
            GraphicsFun.DrawLine(PenColor, xo, yo, x, y) ’Рисование отрезка кривой Лиссажу
            xo = x ‘Сохранение конца текущего отрезка для прорисовки следующего.
            yo = y
        Next
    End Sub

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Width = 800 ‘Задание ширины формы
        Me.Height = 700 ‘Задание высоты формы

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

Button1.Top = 10
        Button1.Left = Me.Width - Button1.Width - 10
        NumericUpDown1.Left = Button1.Left
        NumericUpDown2.Left = Button1.Left
        NumericUpDown1.Top = Button1.Top + 30
        NumericUpDown2.Top = NumericUpDown1.Top + 30
    End Sub
End Class

Запустите проект. Задайте в NumericUpDown, какие-то числовые значения не равные нулю, например 4 и 5. Жмите на Старт и наблюдайте всю красоту. Меняя частоты, можете получить все многообразие фигур Лиссажу.

 

P.S. Вывод графики прямо на форму в рабочих программах имеет большой недостаток.  Например, при сворачивании и разворачивании формы, рисунок не сохраняется. Чтобы этого не случалось лучше рисовать, например в PictureBox, т.е. выбирать для рисования заготовку в виде графического файла. Если есть интерес к этой теме, то это можно будет сделать на следующем уроке.


Есть вопросы? Спроси на нашем форуме!!
Coolhacker770 [26.02.2013 12:55]

Я вам код подсветил. Хорошая, правильная статья)

Однако хотелось бы дать один совет по оформлению кода:

Не надо так называть переменные. GraphicsFun уместнее и красивее было бы назвать g, потому как это не функция. Да и в функциях недослово "Fun" использовать не надо)

А так все отлично-прекрасно, творческих успехов)

pjp07190 [26.02.2013 14:13]

Спасибо, с вашим советом согласен.

admin1310 [26.02.2013 14:48]

А я сторонник полных названий переменных и функций )

Coolhacker770 [26.02.2013 15:15]

Полные - эт конечно прекрасно, но в сим случае GraphicsFun звучит как-то бессмысленно)

Progers300 [26.02.2013 16:44]

Предпочитаю использовать (1,2,3)символа,для переменных.

Coolhacker770 [24.04.2013 19:24]

Меня вот терзает вопрос: откуда взялся символ ‘ ?

Coolhacker770 [24.04.2013 19:29]

(непонятный апостроф в комментариях)

EverybodyLies280 [25.04.2013 11:16]

Может быть текст был вставлен в Word, например, который любит гадить в коде



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.