Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Визуальное проектирование диалогового окна




Внешний вид главного окна приложения приведен на рисунке 2.7.

 

Рис. 2.7. Главное окно приложения

 

Для графической панели pictureBox1 устанавливаются свойства:

 

Свойство Значение Описание
BorderStyle Fixed3D Стиль границы
BackColor White Цвет фона

 

Настройки компонента trackBar1 будут рассматриваться далее.

Проектирование программного кода

Начальное рисование фигуры

Т.к. в данном приложении будет создаваться кисть со штриховой заливкой, прежде всего, необходимо в файл главной формы подключить пространство имен System.Drawing.Drawing2D.

Для рисования круга необходимо иметь координаты его центра и радиус. Для этого нужно объявить соответствующие переменные в классе формы:

int x0, y0;

int radius;

Начальные значения этим переменным можно установить в конструкторе формы или в обработчике события Load. Здесь начальное положение круга – левый нижний угол области рисования, радиус – 30 пикселей.

x0 = 30;

y0 = pictureBox1.Height - 35;

radius = 30;

Рисование круга будет производиться в обработчике события Paint области рисования pictureBox1. Процесс рисования состоит из создания объекта Graphics, очистки области рисования, создания кисти и непосредственного рисования круга. Кисть создается как объект класса HatchBrush (штриховая кисть). При этом первым параметром задается стиль заливки (здесь – HatchStyle.SolidDiamond – «шахматка»), вторым параметром – основной цвет заливки (желтый). Можно указать и третий параметр – «неосновной» цвет или цвет фона (по умолчанию – черный). При рисовании круга (метод FillEllipse()) необходимо задать кисть для заливки, координаты левого верхнего угла прямоугольника, ограничивающего окружность, а также его стороны. Код обработчика приведен ниже:

 

Private void pictureBox1_Paint(object sender, PaintEventArgs e)

{

//создаем графический объект

Graphics g = e.Graphics;

//очищаем область рисования

g.Clear(Color.White);

//создаем штриховую кисть желтого цвета

HatchBrush brush = new HatchBrush(HatchStyle.SolidDiamond, Color.Yellow);

//рисуем круг

g.FillEllipse(brush, x0 - radius, y0 - radius, 2 * radius, 2 * radius);

}

 

Реализация движения фигуры

Реализация движения основана на использовании компонента-таймера (Timer). После помещения на форму его свойству Interval (интервал в миллисекундах, через который поступает сигнал от таймера) устанавливается значение 10.

По нажатию кнопки «Start» необходимо активизировать («включить») таймер, а кнопки «Stop» – остановить его.

 

//кнопка "Start"

Private void button1_Click(object sender, EventArgs e)

{

timer1.Start();

}

//кнопка "Stop"

Private void button2_Click(object sender, EventArgs e)

{

timer1.Stop();

}

 

Чтобы заставить фигуру «двигаться», достаточно изменять ее координаты по сигналу таймера, после чего перерисовать фигуру:

 

Private void timer1_Tick(object sender, EventArgs e)

{

//изменяем координаты круга

x0++;

y0--;

//обновляем область рисования (перерисовываем круг)

pictureBox1.Invalidate();

}

 

В данном случае после нажатия кнопки «Start» круг будет двигаться по диагонали вправо вверх (координата x увеличивается, y – уменьшается), пока не исчезнет за пределами области рисования или пока не будет нажата кнопка «Stop».

 

Программная реализация «отскакивания от стенок»

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

int xDir, yDir;

Переменная xDir принимает значение 1, если круг двигается вправо, и –1, если влево. Переменная yDir равна 1, если идет движение вниз, и –1, если вверх. Поскольку изначально напрвление вижения задается вправо вверх, этим переменным нужно задать соответствующие исходные значения (в конструкторе или в обработчике события Load):

xDir = 1;

yDir = -1;

«Отскакивание от стенок» реализуется за счет изменения значений этих переменных. Если круг «подлетел» к левой стенке, то после этого он должен начать двигаться вправо, т.е. переменной xDir нужно присвоить значение 1, и т.д. Приближение к стенкам отслеживается по значениям переменных x0 и y0 с учетом радиуса круга. При этом при «касании» кругом правой и нижней стенок необходимо вносить корректировку в 5 пикселей из-за наличия трехмерной рамки у области рисования.

Таким образом, обработчик события Tick для таймера модифицируется следующим образом:

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...