Назад | Начало урока | Вперед
Содержание

Глава 13 (продолжение 1)

Вверх

Внимание — графика

Теперь, когда у вас есть общее представление об указателях, можно приступить к созданию
более интересных программ .NET. В этом разделе коснемся графических возможностей среды
.NET. Так же как до этого вы использовали функции Console для считывания и отображения
текста, теперь вы будете использовать функции Graphics для отображения на экране графики.
Но, прежде чем отобразить что-то на экране, нужно создать графический объект. Делается это с помощью кода, подобного приведенному ниже,

Form *poForm = new Form О;
Graphics *poGraphics = poForm->CreateGraphics();

Сплошные указатели! Когда вы хотите что-то нарисовать, сделать это можно в окне (не в
том, из которого вы смотрите на улицу, а в окне, похожем на те, что используются в среде
Windows). Один из самых простых способов сделать это— использовать класс Form. Затем
можно вызвать процедуру CreateGraphi.es, для того чтобы создать графический элемент,
называемый объектом Graphics. Обратите внимание, что для доступа к объектам Form и
Graphics используются указатели, а для вызова методов этих объектов — символы ->.
Перед тем как что-то нарисовать, нужно сделать форму видимой с помощью кода, подобного этому:

poForm->Show();

Затем можно вызывать графические функции .NET, часть из которых показана в

табл. 13,1. Нарисовав все, что нужно, вызовите метод Dispose:

poGraphics->Dispose() ;

Таблица 13.1. Некоторые графические команды

Метод Пример Описание
Clear poG -> Clear(Color::Red) Заполняет весь графический элемент определенным цветом (см, также табл. 13.2)
Dispose poG -> Dispose
Освобождает память, занятую информацией о графических объектах, Метод вызывается после завершения этапа рисования
DrawEllipse poG->DrawEllipse (poPen, 10, 20, 150,200) Рисует эллипс, используя указанное перо. (Перья описываются несколько ниже.) Числовые параметры - это координаты х и у, которые определяют верхний левый угол эллипса, а также значения ширина и высота. В действительности х, у, ширина и высота определяют положение и размеры прямоугольника, внутри которого будет нарисован эллипс. Если высоту и ширину сделать равными, получится круг
DrawLine poG->DrawLine(poPen, 10, 20, 160, 220) Рисует прямую линию, соединяющую две точки. В данном случае линия будет соединять точку с координатами (10,20) и точку с координатами (160,220)
DrawReсtangle poG->DrawRectangle (poPen, 10, 20, 150, 200) Рисует прямоугольник. Два первых числовых параметра определяют верхний левый угол прямоугольника, два следующих - его ширину и высоту
DrawString poG->DrawString (S"Test", poFont, poBrush, 10, 20) Рисует текст указанными шрифтом, кистью и начиная с указанной позиции, Шрифты и кисти будут описаны ниже
FillEllipse poG->FillEllipse(poBrush, 10, 20, 150, 200) Рисует эллипс, закрашенный указанной кистью
FillRectangle poG->FillRectangle (poBrush, 10, 20, 150, 200) Рисует прямоугольник, закрашенный указанной кистью

Вверх

Все цвета радуги

Для каждого графического элемента необходимо указывать цвет, которым он будет нарисован. Осуществляется это с помощью структуры Color. Всего возможны два варианта: либо использовать один из заранее заданных цветов, либо создать свой цвет, вызвав метод
FromArgb.
В табл. 13.2 показан список предопределенных цветов. Единственное предостережение: не
принимайте пищу во время отображения объектов с такими цветами, как PapayaWhip или
LemonChi f f on. Иначе вы рискуете испортить себе аппетит и вызвать расстройство желудка.

Подсказка Подсказка

Подсказка Подсказка

Метод FromArgb получил свое название от слов Alpha-Red-Green-Blue (альфа-красный- зеленый-голубой). Любой другой цвет из диапазона, воспринимаемого человеческим глазом, может быть получен путем смешивания в разных пропорциях этих трех основных цветов.

Количественное вхождение основного цвета в состав производного измеряется в пределах от
О (означает полное отсутствие) до 255 (означает максимальную интенсивность). Например,
если взять красного 255 единиц, зеленого 0 и голубого 0, то получим ярко-красный цвет. Если
красного взять 128, зеленого 128 и голубого 128, получим светло-серый цвет. Я бы с удовольствием рассказал о всех возможных цветах и оттенках, которые можно получить, комбинируя
основные цвета, но тогда ни на что другое в книге не хватило бы места. (Ради интереса попробуйте посчитать, сколько разных цветов можно получить с помощью этой системы.)

Совет:

Если вы хотите точно узнать, в каких пропорциях входят основные цвета в состав
нужного вам цвета, откройте какую-нибудь графическую программу, например
Adobe Photoshop. В окне цветоподборщика (color picker) найдите нужный вам
цвет. В этом же окне будут показаны параметры выбранного цвета.

Чтобы использовать голубой цвет, наберите

Color::Blue

Если же вам нужен какой-то специфический цвет, наберите код наподобие этого:

Color: :FormArgb(255, 12 8, 0) ;

Пример использования структуры Color будет показан несколько ниже в этой главе.

В приведенном выше примере указаны значения для красного, зеленого и голубого цветов. Но метод FromArgb может принимать значение еще одного параметра— альфа, которым обозначается прозрачность графического элемента. Поэкспериментируйте с этой возможностью — быть может, она вам пригодится.

При использовании объекта Color не нужно набирать оператор new для создания нового объекта (как это делается в случае с объектом Graphics). Вместо этого наберите символы ::, чтобы указать один из предустановленных цветов или вызвать метод FromArgb.

Вверх

Перья для рисования
Рисуя линию (метод DrawLine) или фигуру (методы DrawEllipse и
DrawRec'angle), вы используете объект Реп (перо). Этот объект переносит в мир компьютерной графики свойства обычного пера или карандаша. Он рисует линии определенного
цвета и определенной толщины. Чтобы создать красный карандаш, который будет рисовать
линию толщиной в один пиксель, наберите такой код:

poPen = new Pen(Color::Red];

А этим кодом создается синий карандаш с толщиной следа в пять пикселей:

poPen = new Pen(Color::Blue, 5);

Цвет и толщину объекта Реп можно изменять в процессе выполнения программы. Это
делается путем изменения значений свойств Color и Width этого объекта. Например:

poPen->Wigth = 12;
poPen->Color = Co]or::SaddleBrown;

Графические функции среды .NET иногда обозначаются как GDI+

Вверх

Кисточка для раскраски

Если вы хотите нарисовать заполненную чем-то фигуру (используя, например, методы
FillEllipse или FillRectangle), вместо объекта Реп используется объект Brush
(кисточка). Эффект применения этого объекта подобен эффекту использования обычной кис-
точки для рисования. В электронном варианте есть два вида кисточек: SolidBrush и
TextureBrush. Кисточка SolidBrush заполняет фигуру сплошным цветом, в то время как
TextureBrush может заполнить фигуру каким-нибудь рисунком или изображением.
Чтобы создать новую кисточку, наберите такой код:

poBrush = new SolidBrush(Color::Red);

Для изменения цвета кисточки измените свойство Color этого объекта:

poBrush->Color = Color::Thistle;

Вверх

Шрифты
Когда вы применяете метод Drawstring для отображения текста на экране, необходимо
выбрать используемый шрифт. Для этого наберите код наподобие

poFont = new Font("Arial", 12);

Значением первого параметра определяется сам шрифт, а второго— его размер. Вообще
сушествует множество различных шрифтов. Примеры некоторых из них показаны на рис. 13.3.

Подсказка

Совет:

Можно использовать вспомогательную программу Character Map, чтобы увидеть,
как одни и те же буквы отображаются в разных шрифтах. Это очень полезная
возможность, особенно когда речь идет о шрифтах Symbol и WingDings. Если вам
скучно и вы не знаете, чем заняться, можете составить с помощью этих шрифтов
многозначительное послание, состоящее из разных значков и символов, отправить его своим
друзьям и посмотреть, как они на него отреагируют.

Вверх

Займемся рисованием

Теперь, когда вы познакомились с основами создания графических элементов в среде
.NET, можно приступать к использованию этих возможностей на практике. Ниже приведен
код небольшой программы, которая рисует на экране линии и некоторые геометрические фигуры. При этом используются объекты, представляющие перья, кисти и шрифты.



//Graphics
//Демонстрация графических возможностей .NET
#include "stdafx.h"
#using <mscorlib.dll>
#using <System.Windows.Forms.dll>
#using <System.dll>
fusing <System.Drawing.dll>
using manespace System;
using manespace System::Drawing;
using manespace System::Windows::Forms;

//С этой точки начинается выполнение программы
tifdef _UNICODE
int wmain(void)
#else
int main(void)
#endif
{

//Создание структур для отображения графики
Form *poForm = new Form();
Graphics *poGraphics = poForm->CreateGraphics();
//Создание красного пера
Pen *poPen = new Pen(Color::Red);
//Отображение окна для рисования
poForrr.->Show () ;
//Отображение линии
poGraphics->DrawLine(poPen, 10, 10, 120, 150); //Изменение свойств пера и
//отображение новой линии
poPen->Color = Color::FormArgb(100, 255, 200);
poPen->Wigth = 5;
poGraphics->DrawLine(poPen, 120, 150, 10, 150);
//Отображение эллипса с использованием того же пера
poGraphics->DrawEllipse(poPen, 10, 150, 40, 60) ;
//Создание новой кисти
SolidErush *poBrush = new SolidBrush(Color::Tomato);
//Отображение прямоугольника, закрашенного этой кистью
poGraphics->FillRectangle(poBrush, 50, 150, 40, 60);
//Создание шрифта
Font *poFont = new Font("Helvetica", 22);
//Отображение текста этим шрифтом
poGraphics->DrawString(S"Hello", poFont, poBrush, 200, 200);
//Освобождение памяти

poGraphics->Dispose() ;
//Ожидание, пока пользователь не закроет окно с графикой
Application::Run(poForm);
}

В этой программе необходимо обратить внимание на следующее.
Во-первых, на наличие нескольких новых строк с ключевыми словами
#using и using namespace в начале программы. Они нужны потому,
что для использования графики и форм в среде .NET требуется
подключение некоторых дополнительных файлов.

Во-вторых, на использование кода Application::Run в конце программы. Каждый
раз, когда вы используете форму, необходимо набирать код, указывающий системе, что не
нужно прекращать выполнение программы до тех пор. пока пользователь не закроет окно
этой формы. Это намного удобнее применения функции HangOut, которая постоянно использовалась в предыдущих примерах. Форма отображается на экране, пользователь просматривает все, что на ней нарисовано, а когда щелкает на кнопке закрытия формы, программа прекращает работу.

Подсказка

Рис 13.4 Результат работы программы

Код программы в файле Graphics


Назад | Начало урока | Вверх | Вперед
Содержание