Глава 29. Рисование заполненных прямоугольников и эллипсов при помощи нажатия кнопки мыши — КиберПедия 

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Глава 29. Рисование заполненных прямоугольников и эллипсов при помощи нажатия кнопки мыши

2017-05-23 393
Глава 29. Рисование заполненных прямоугольников и эллипсов при помощи нажатия кнопки мыши 0.00 из 5.00 0 оценок
Заказать работу

 

Листинг 29.1. Объявляем глобальные переменные и записываем наш код.

 

//Объявляем глобальные переменные для координат "x" и "y"

//указателя мыши в момент нажатия кнопки мыши:

public int x_MouseDown_1, y_MouseDown_1;

//Определяем координаты указателя в момент нажатия кнопки:

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)

{

x_MouseDown_1 = e.X; y_MouseDown_1 = e.Y;

}

В панели Properties для элемента управления PictureBox на вкладке Events дважды щелкаем имя второго события MouseUp. Появляется шаблон, который после записи нашего кода принимает следующий вид.

 

Листинг 29.2. Метод pictureBox1_MouseUp для обработки отпускания кнопки.

 

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)

{

//Объявляем объект "g" класса Graphics и предоставляем

//ему возможность рисования на pictureBox1:

Graphics g = Graphics.FromHwnd(pictureBox1.Handle);

//Создаем и рисуем прямоугольник:

Rectangle myRectangle = new Rectangle(

new Point(x_MouseDown_1, y_MouseDown_1),

new Size(e.X - x_MouseDown_1, e.Y - y_MouseDown_1));

g.DrawRectangle(new Pen(Color.Transparent),

myRectangle);

//Выбираем кисть myBrush для линейного градиента

//между белым White и черным Black цветами:

LinearGradientBrush myBrush;

myBrush = new LinearGradientBrush(myRectangle,

Color.White, Color.Black,

LinearGradientMode.Horizontal);

//Рисуем заполненный прямоугольник:

g.FillRectangle(myBrush, myRectangle);

}

Чтобы удалить, в случае необходимости, то, что мы нарисовали, дважды щелкаем кнопку с надписью “ 1. Очистить панель” в режиме проектирования. Появляется шаблон метода button1_Click для обработки события в виде щелчка кнопки; этот шаблон после записи нашего кода принимает следующий вид.

 

Листинг 29.3. Метод button1_Click для стирания рисунка.

 

private void button1_Click(object sender, EventArgs e)

{

//Объявляем объект "g" класса Graphics

//и связываем его с pictureBox1:

Graphics g = pictureBox1.CreateGraphics();

//Очищаем (Clear) элемент pictureBox1 от рисунка

//и заполняем его белым цветом:

g.Clear(Color.White);

}

В режиме выполнения (Debug, Start Without Debugging) перемещаем указатель мыши в первую точку, нажимаем кнопку, перемещаем указатель мыши во вторую точку и отпускаем кнопку; при этом из предыдущей точки в данную точку рисуется прямоугольник, заполненный по линейному градиенту между двумя заданными цветами (белым White и черным Black). Аналогично строим еще несколько прямоугольников (рис. 29.1). Если в коде на листинге 29.2 вместо строки для прямоугольника мы запишем (g.FillEllipse(myBrush, myRectangle);), то по этому второму варианту программы можем рисовать эллипсы, заполненные по тому же линейному градиенту, рис. 29.2. После щелчка кнопки с надписью “ 1. Очистить панель” (или нажатия клавиши Enter, или Alt+1) то, что мы нарисовали, удаляется. И мы можем начать рисовать сначала.


 

Глава 30. Непрерывный график-осцилло­грамма и его проверка при помощи диспетчера задач и файла подкачки

Листинг 30.1. Переменные и метод для построения графика.

 

//Объявляем и инициализируем переменные:

float x = 0;

float y0 = 49;

float y1 = 0;

float k = 10;

float b = -5;

//Перемещение графика dx за каждый интервал времени::

private const float dx = 2;

//Определяем значение функции y=f(x):

private float f()

{

//Генератор в виде метода NextDouble возвращает

//случайное число типа double, которое присваиваем x:

Random myRandom = new Random();

x = Convert.ToSingle(myRandom.NextDouble());

//Вычисляем новое значение функции y=f(x):

y1 = y0 + k * x + b;

//Задаем интервал для значений функции y=f(x):

if (y1 > 98.9) y1 = 98.9f;

if (y1 < 0.999) y1 = 0.999f;

return y1;

}

 

Листинг 30.2. Метод Form1_Load.

 

private void Form1_Load(object sender, EventArgs e)

{

//Для рисования графика создаем объект myGraphics,

//связываем его с PictureBox1 и масштабируем:

Bitmap myBitmap = new Bitmap(pictureBox1.Width,

pictureBox1.Height);

Graphics myGraphics = Graphics.FromImage(myBitmap);

myGraphics.ScaleTransform(1, -100.0f /

pictureBox1.Height);

myGraphics.TranslateTransform(0, -100);

//Проектируем координатные горизонтальные линии:

Pen myPen = new Pen(Color.Blue, 1);

int i;

for (i = 10; i <= 100; i+=10)

myGraphics.DrawLine(myPen,

0, i, pictureBox1.Width, i);

//Показываем координатные горизонтальные линии

//на панели PictureBox1:

pictureBox1.Image = myBitmap;

//Освобождаем ресурсы, занятые объектом myGraphics:

myGraphics.Dispose();

}

Для программной реализации алгоритма из первого параграфа дважды щелкаем значок Timer (ниже формы в режиме проектирования). Появляется файл Form1.cs с шаблоном, который после записи нашего кода принимает следующий вид.

 

Листинг 30.3. Метод Timer1_Tick.

 

private void timer1_Tick(object sender, EventArgs e)

{

//Перемещаем прежний график влево:

Bitmap myBitmap = new Bitmap(pictureBox1.Width,

pictureBox1.Height);

Graphics g = Graphics.FromImage(myBitmap);

g.DrawImage(pictureBox1.Image, -dx, 0);

//Проектируем координатные горизонтальные линии:

g.ScaleTransform(1, -100.0F / pictureBox1.Height);

g.TranslateTransform(0, -100);

Pen myPen = new Pen(Color.Blue, 1);

int i;

for (i = 10; i <= 100; i+=10)

g.DrawLine(myPen, pictureBox1.Width - dx, i,

pictureBox1.Width, i);

//На каждом интервале времени

//получаем новое значение функции f():

y1 = f();

//Справа рисуем новую часть графика:

Pen myPen2 = new Pen(Color.Black, 1);

g.DrawLine(myPen2,

pictureBox1.Width - 1 - dx, y0,

pictureBox1.Width - 1, y1);

y0 = y1;

//Показываем новую часть графика

//на панели PictureBox1:

pictureBox1.Image = myBitmap;

}


 


Поделиться с друзьями:

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.