Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Жарков В.А. - Visual C++ 2005, DirectX 9.0c и Microsoft Agent в компьютерной графике, мультимедиа и играх (Листинги книги) - 2005

.pdf
Скачиваний:
306
Добавлен:
13.08.2013
Размер:
1.14 Mб
Скачать

50 Жарков В.А. Компьютерная графика, мультимедиа и игры на Visual C++ 2005

myForm13->d = d; myForm13->x_min = x_min; myForm13->x_max = x_max; myForm13->Show();

}

Листинг 16.5. Метод для выполнения анимации.

//Объявляем булеву переменную myColor со значением false: bool static myColor = false;

private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)

{

//Вводим анимацию: if (myColor == false)

{

//Выводим желтый цвет поля текста: label1->BackColor = Color::Yellow;

//Изменяем значение myColor на противоположное: myColor = true;

}

else

{

//Выводим белый цвет поля текста: label1->BackColor = Color::White;

//Изменяем значение myColor на противоположное: myColor = false;

}

}

Листинг 16.6. Метод для выполнения анимации.

//Объявляем булеву переменную myColor со значением false: bool static myColor = false;

private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)

{

//Вводим анимацию: if (myColor == false)

{

//Выводим черный цвет текста: pictureBox1->ForeColor = Color::Black; //Изменяем значение myColor на противоположное: myColor = true;

}

else

Глава 16. Графики типичных функций

51

{

//Выводим белый цвет текста: pictureBox1->ForeColor = Color::White; //Изменяем значение myColor на противоположное: myColor = false;

}

}

Глава 17. Рисование при помощи перемещения мыши

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

//Объявляем глобальные переменные

//для координат "x" и "y" указателя мыши

//в момент нажатия кнопки мыши и перемещения мыши: public: int x_MouseDown, y_MouseDown;

public: int x_MouseMove, y_MouseMove;

//Чтобы рисование осуществлялось //только после каждого щелчка кнопки, //объявляем переключатель рисования //в виде глобальной переменной OffOn: bool static OffOn = false;

private:

System::Void Form1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)

{

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

x_MouseDown = e->X; y_MouseDown = e->Y;

//Изменяем значение OffOn на противоположное: OffOn = true;

}

Листинг 17.2. Метод Form1_MouseMove для перемещения мыши.

private:

System::Void Form1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)

{

//Объявляем объект "g" класса Graphics //и при помощи функции CreateGraphics //предоставляем ему возможность рисования

//на this форме Form1:

Graphics^ g = this->CreateGraphics();

//Определяем координаты "x" и "y" указателя мыши //в моменты перемещения мыши:

x_MouseMove = e->X;

Глава 17. Рисование при помощи перемещения мыши

53

y_MouseMove = e->Y;

//Выбираем перо "myPen" красного цвета Red //толщиной в 3 пикселя:

Pen^ myPen = gcnew Pen(Color::Red, 3);

//Если переключатель рисования

//в виде переменной OffOn равен true: if (OffOn == true)

{

//после нажатия кнопки мыши и перемещения мыши //рисуется линия заданного цвета и толщины: g->DrawLine(myPen, x_MouseDown, y_MouseDown,

x_MouseMove, y_MouseMove);

//Задаем предыдущей позиции указателя мыши //координаты данной позиции указателя мыши: x_MouseDown = x_MouseMove;

y_MouseDown = y_MouseMove;

}

}

Листинг 17.3. Метод Form1_MouseUp для освобождения кнопки мыши.

private:

System::Void Form1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)

{

//Изменяем значение OffOn на противоположное: OffOn = false;

}

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

private:

System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

//Объявляем объект "g" класса Graphics: Graphics^ g = this->CreateGraphics();

//Очищаем (Clear) клиентскую область //формы Form1 от рисунка: g->Clear(BackColor);

}

Глава 18. Рисование линий при помощи нажатия кнопки мыши

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

//Объявляем глобальные переменные

//для координат "x" и "y" указателя мыши //в момент 1-го и 2-го нажатий кнопки мыши: public: int x_MouseDown_1, y_MouseDown_1,

x_MouseDown_2, y_MouseDown_2;

//Чтобы рисование осуществлялось //только после каждого щелчка кнопки, //объявляем переключатель рисования //в виде глобальной переменной OffOn: bool static OffOn = false;

private:

System::Void Form1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)

{

//Объявляем объект "g" класса Graphics //и при помощи функции CreateGraphics //предоставляем ему возможность рисования

//на this форме Form1:

Graphics^ g = this->CreateGraphics();

//Выбираем перо "myPen" красного цвета Red //толщиной в 3 пикселя:

Pen^ myPen = gcnew Pen(Color::Red, 3);

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

x_MouseDown_2 = e->X; y_MouseDown_2 = e->Y;

//Проверяем условие для переменной OffOn: //Если переменная OffOn равна //исходному значению false,

if (OffOn == false)

{

//то задаем координаты указателя мыши //после первого нажатия кнопки мыши: x_MouseDown_1 = x_MouseDown_2;

Глава 18. Рисование линий при помощи нажатия кнопки мыши

55

y_MouseDown_1 = y_MouseDown_2;

//Изменяем значение OffOn на противоположное: OffOn = true;

}

else

{

//Если переключатель в виде переменной OffOn //равен true, то рисуем линию между предыдущей //и последующей позицией указателя мыши //в момент нажатия кнопки мыши:

g->DrawLine(myPen, x_MouseDown_1, y_MouseDown_1, x_MouseDown_2, y_MouseDown_2);

//Задаем предыдущей позиции указателя мыши //координаты данной позиции указателя мыши: x_MouseDown_1 = x_MouseDown_2; y_MouseDown_1 = y_MouseDown_2;

}

}

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

private:

System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

//Объявляем объект "g" класса Graphics: Graphics^ g = this->CreateGraphics(); //Очищаем (Clear) клиентскую область //формы Form1 от рисунка: g->Clear(BackColor);

//Чтобы рисование осуществлялось //только от позиции курсора на предыдущем щелчке

//до позиции курсора на данном щелчке кнопки мыши, //задаем переключателю рисования

//в виде глобальной переменной OffOn //первоначальное значение:

OffOn = false;

}

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

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

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

public: int x_MouseDown_1, y_MouseDown_1;

private:

System::Void pictureBox1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)

{

x_MouseDown_1 = e->X; y_MouseDown_1 = e->Y;

}

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

private:

System::Void pictureBox1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)

{

//Выбираем перо "myPen" черного цвета Black //толщиной в 3 пикселя:

Pen^ myPen = gcnew Pen(Color::Black, 3);

//Объявляем объект "g" класса Graphics и предоставляем //ему возможность рисования на pictureBox1:

Graphics^ g = Graphics::FromHwnd(pictureBox1->Handle); //Рисуем прямоугольник:

g->DrawRectangle(myPen, x_MouseDown_1, y_MouseDown_1, e->X - x_MouseDown_1, e->Y - y_MouseDown_1);

}

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

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

//Объявляем объект "g" класса Graphics //и связываем его с pictureBox1:

Graphics^ g = pictureBox1->CreateGraphics();

Глава 19. Рисование прямоугольников и эллипсов при помощи мыши

57

//Очищаем (Clear) элемент pictureBox1 от рисунка //и заполняем его белым цветом: g->Clear(Color::White);

}

В режиме выполнения (Debug, Start Without Debugging) перемещаем указатель мыши в первую точку, нажимаем кнопку, перемещаем указатель мыши во вторую точку и отпускаем кнопку; при этом из предыдущей точки в данную точку рисуется прямоугольник. Аналогично строим еще несколько прямоугольников (рис. 19.1).

Если в коде на листинге 19.2 вместо строки для прямоугольника мы запишем g->DrawEllipse(myPen, x_MouseDown_1, y_MouseDown_1,

e->X - x_MouseDown_1, e->Y - y_MouseDown_1);

то по этому второму варианту программы можем рисовать эллипсы (рис. 19.2) согласно алгоритму. После щелчка кнопки с надписью “1. Очистить панель” (или нажатия клавиши Enter, или Alt+1) то, что мы нарисовали, удаляется. И мы можем начать рисовать сначала.

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

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

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

public: int x_MouseDown_1, y_MouseDown_1;

private:

System::Void pictureBox1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)

{

//Определяем коорд-ты указателя в момент нажатия кнопки: x_MouseDown_1 = e->X; y_MouseDown_1 = e->Y;

}

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

private:

System::Void pictureBox1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)

{

//Объявляем объект "g" класса Graphics и предоставляем //ему возможность рисования на pictureBox1:

Graphics^ g = Graphics::FromHwnd(pictureBox1->Handle);

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

Rectangle(Point(x_MouseDown_1, y_MouseDown_1), System::Drawing::Size(

e->X - x_MouseDown_1, e->Y - y_MouseDown_1)); g->DrawRectangle(gcnew Pen(Color::Transparent),

myRectangle);

//Выбираем кисть myBrush для линейного градиента //между белым White и черным Black цветами: LinearGradientBrush^ myBrush;

myBrush = gcnew LinearGradientBrush(myRectangle, Color::White, Color::Black, LinearGradientMode::Horizontal);

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

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

59

g->FillRectangle(myBrush, myRectangle);

}

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

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

//Объявляем объект "g" класса Graphics //и связываем его с pictureBox1:

Graphics^ g = pictureBox1->CreateGraphics();

//Очищаем (Clear) элемент pictureBox1 от рисунка //и заполняем его белым цветом: g->Clear(Color::White);

}

В режиме выполнения (Debug, Start Without Debugging):

перемещаем указатель мыши в первую точку, нажимаем кнопку, перемещаем указатель мыши во вторую точку и отпускаем кнопку;

при этом из предыдущей точки в данную точку рисуется прямоугольник, заполненный по линейному градиенту между двумя заданными цветами (белым White и

черным Black).

Аналогично строим еще несколько прямоугольников (рис. 20.1).

Если в коде на листинге 20.2 вместо строки для прямоугольника мы запишем

g->FillEllipse(myBrush, myRectangle);

то по этому второму варианту программы можем рисовать эллипсы, заполненные по тому же линейному градиенту, рис. 20.2.

После щелчка кнопки с надписью “1. Очистить панель” (или нажатия клавиши Enter, или Alt+1) то, что мы нарисовали, удаляется.

И мы можем начать рисовать сначала.

Соседние файлы в предмете Программирование на C++