Глава 13 (продолжение 1)
Вверх
Теперь, когда у вас есть общее представление об указателях, можно приступить к созданию
Затем можно вызывать графические функции .NET, часть из которых показана в
табл. 13,1. Нарисовав все, что нужно, вызовите метод Dispose:
Таблица 13.1. Некоторые графические команды
Внимание — графика
более интересных программ .NET. В этом разделе коснемся графических возможностей среды
.NET. Так же как до этого вы использовали функции Console для считывания и отображения
текста, теперь вы будете использовать функции Graphics для отображения на экране графики.
Но, прежде чем отобразить что-то на экране, нужно создать графический объект. Делается это с помощью кода, подобного приведенному ниже,
Form *poForm = new Form О;
Сплошные указатели! Когда вы хотите что-то нарисовать, сделать это можно в окне (не в
Graphics *poGraphics = poForm->CreateGraphics();
том, из которого вы смотрите на улицу, а в окне, похожем на те, что используются в среде
Windows). Один из самых простых способов сделать это— использовать класс Form. Затем
можно вызвать процедуру CreateGraphi.es, для того чтобы создать графический элемент,
называемый объектом Graphics. Обратите внимание, что для доступа к объектам Form и
Graphics используются указатели, а для вызова методов этих объектов — символы ->.
Перед тем как что-то нарисовать, нужно сделать форму видимой с помощью кода, подобного этому:
poForm->Show();
poGraphics->Dispose() ;
Метод | Пример | Описание |
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 получил свое название от слов Alpha-Red-Green-Blue (альфа-красный- зеленый-голубой). Любой другой цвет из диапазона, воспринимаемого человеческим глазом,
может быть получен путем смешивания в разных пропорциях этих трех основных цветов.
Количественное вхождение основного цвета в состав производного измеряется в пределах от
Совет:
Чтобы использовать голубой цвет, наберите
Если же вам нужен какой-то специфический цвет, наберите код наподобие этого:
Пример использования структуры Color будет показан несколько ниже в этой главе.
Вверх
А этим кодом создается синий карандаш с толщиной следа в пять пикселей:
Цвет и толщину объекта Реп можно изменять в процессе выполнения программы. Это
Вверх
Если вы хотите нарисовать заполненную чем-то фигуру (используя, например, методы
Для изменения цвета кисточки измените свойство Color этого объекта:
Вверх
Значением первого параметра определяется сам шрифт, а второго— его размер. Вообще
Совет:
Вверх
Теперь, когда вы познакомились с основами создания графических элементов в среде
//С этой точки начинается выполнение программы
В этой программе необходимо обратить внимание на следующее.
Во-вторых, на использование кода Application::Run в конце программы. Каждый
Рис 13.4 Результат работы программы
Код программы в файле Graphics
Назад |
Начало урока |
Вверх |
Вперед
Все цвета радуги
FromArgb.
В табл. 13.2 показан список предопределенных цветов. Единственное предостережение: не
принимайте пищу во время отображения объектов с такими цветами, как PapayaWhip или
LemonChi f f on. Иначе вы рискуете испортить себе аппетит и вызвать расстройство желудка.
О (означает полное отсутствие) до 255 (означает максимальную интенсивность). Например,
если взять красного 255 единиц, зеленого 0 и голубого 0, то получим ярко-красный цвет. Если
красного взять 128, зеленого 128 и голубого 128, получим светло-серый цвет. Я бы с удовольствием рассказал о всех возможных цветах и оттенках, которые можно получить, комбинируя
основные цвета, но тогда ни на что другое в книге не хватило бы места. (Ради интереса попробуйте посчитать, сколько разных цветов можно получить с помощью этой системы.)
нужного вам цвета, откройте какую-нибудь графическую программу, например
Adobe Photoshop. В окне цветоподборщика (color picker) найдите нужный вам
цвет. В этом же окне будут показаны параметры выбранного цвета.
Color::Blue
Color: :FormArgb(255, 12 8, 0) ;
Перья для рисования
Рисуя линию (метод 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;
Кисточка для раскраски
FillEllipse или FillRectangle), вместо объекта Реп используется объект Brush
(кисточка). Эффект применения этого объекта подобен эффекту использования обычной кис-
точки для рисования. В электронном варианте есть два вида кисточек: SolidBrush и
TextureBrush. Кисточка SolidBrush заполняет фигуру сплошным цветом, в то время как
TextureBrush может заполнить фигуру каким-нибудь рисунком или изображением.
Чтобы создать новую кисточку, наберите такой код:
poBrush = new SolidBrush(Color::Red);
poBrush->Color = Color::Thistle;
Шрифты
Когда вы применяете метод Drawstring для отображения текста на экране, необходимо
выбрать используемый шрифт. Для этого наберите код наподобие
poFont = new Font("Arial", 12);
сушествует множество различных шрифтов. Примеры некоторых из них показаны на рис. 13.3.
как одни и те же буквы отображаются в разных шрифтах. Это очень полезная
возможность, особенно когда речь идет о шрифтах 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 требуется
подключение некоторых дополнительных файлов.
раз, когда вы используете форму, необходимо набирать код, указывающий системе, что не
нужно прекращать выполнение программы до тех пор. пока пользователь не закроет окно
этой формы. Это намного удобнее применения функции HangOut, которая постоянно использовалась в предыдущих примерах. Форма отображается на экране, пользователь просматривает все, что на ней нарисовано, а когда щелкает на кнопке закрытия формы, программа прекращает работу.
Содержание