Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на BASIC / Visual Basic / Гед Мид. Удачные диаграммы GDI+ Работа с графикой [doc].doc
Скачиваний:
23
Добавлен:
02.05.2014
Размер:
870.4 Кб
Скачать

Внешние границы диаграммы

    Мы начинаем рисовать оси X и Y диаграммы, включая отметки и числа вертикальной оси. Это код содержится в процедуре, названной DrawOutline.

Объект Graphics

    Если вы читали предыдущие статьи, то помните, что мы можем думать об объекте Graphics, как о прозрачном холсте, прямо на котором мы можем рисовать. Код ниже позволяет нам рисовать на объекте Graphics Bitmap’а. Позже мы возьмем законченный Bitmap и присвоим его элементу PictureBox; в результате пользователь увидит нарисованную диаграмму внутри PictureBox.

Private Sub DrawOutline()

' Инициируем bmap и присваиваем ему ширину и высоту как у PictureBox.

' Также устанавливаем разрешение bitmap равным PictureBox

bmap = New Bitmap(PBLineChart.Width, _ PBLineChart.Height, PBLineChart.CreateGraphics)

' Присваиваем Bitmap объекту Graphics.

g = Graphics.FromImage(bmap)

Вертикальная ось

    Код вертикальной оси тот же, что мы использовали в некоторых из предыдущих статей. Мы рисуем вертикальную линию, а затем вставляем 10 маленьких горизонтальных отметок на равных расстояниях одна от другой. Для простоты мы снова используем значения от 0 до 1000. Если вам нужно применить другие максимальные значения (а во многих случаях так и будет), то вы увидите описание того, как это сделать в статье Части 4 здесь. Первым делом нужно рассчитать точки начала и конца вертикальной линии. Вы увидите, что мы делаем это с помощью переменных, установленных раньше для полей.

' Рисуем линию для вертикальной оси.

Dim StartPoint As New Point(LeftMargin, PBLineChart.Height - BaseMargin)

Dim EndPoint As New Point(LeftMargin, TopMargin)

' Основное перо для рисования внешних линий

Dim LinePen As New Pen(Color.Black, 2)

' Рисуем вертикальную линию

g.DrawLine(LinePen, StartPoint, EndPoint)

Чтобы добавить отметки и значения (100, 200 и т.д. до 1000) используйте следующий код.

Dim StartPoint As New Point(LeftMargin, PBBarChart.Height - BaseMargin)

Dim EndPoint As New Point(LeftMargin, TopMargin)

    Названия переменных StartPoint и EndPoint не нуждаются в объяснении, но понятие Point (точка) стоит упоминания. Нам хорошо знакомо понятие точки – это определенное место, которое может быть определено определенным способом. В графике .NET точка (Point) идентифицируется ее X-положением (как далеко она отдалена от левого края) и ее Y-положением (как далека она от верха).     В данном проекте мы измеряем эти два значения в пикселях, потому что эта единица используется для определения позиций на экране. Важно понимать, что Point – это не просто положение в пространстве, фактически это Объект, завершенный в своих свойствах и методах.     Вы видите, что StartPoint объекта Point имеет свою X-позицию, установленную в строке с левым полем, которое мы установили раньше; ее Y-позиция вычисляется при перемещении от основания PictureBox на расстояние, равное BaseMargin. EndPoint оси имеет X-значение, такое же, как и у StartPoint, чего можно было ожидать (в конце концов, это вертикальная линия). Ее Y-значение установлено в точке, которая отступает от верхнего края PictureBox на значение TopMargin.     Вооружившись начальной и конечной точками, мы берем перо и рисуем линию:

Dim LinePen As New Pen(Color.Black, 2)

g.DrawLine(LinePen, StartPoint, EndPoint)

    Если вы вводите код по мере прочтения статьи (и вы не читали предыдущих статей), вы можете поинтересоваться, почему ничего не появляется в PictureBox. Причина в том, что мы нарисовали линию на объекте, который еще не видим для пользователя. Вы узнаете, что мы создали объект изображения того же размера, что и PictureBox и скрыто используем это изображение. (В самом деле, технически правильно – как объяснялось раньше – мы рисуем на GraphicObject Bitmap, но эффект тот же). На этом уровне мы еще не присвоили это изображение PictureBox в качестве его изображения, поэтому PictureBox остается пустым.