- •Часто задаваемые вопросы при выполнении курсового проекта (Бизнес-информатика, 1 курс) Оглавление
- •Как создать проектWindows-приложения?
- •Как изменить заголовок окна?
- •Как изменить цвет фона у окна?
- •Как назначить какие-то действия на щелчок мыши?
- •Как понять, каковы были координаты мыши в момент щелчка по ее кнопке?
- •Как понять, какая клавиша на клавиатуре была нажата?
- •Что такое перо (Pen)?
- •Что такое кисть (Brush)?
- •Как сделать нестандартную закраску фигуры (картинкой, переливающимся цветом и пр.)?
- •Как задать цвет?
- •Как изменить цвет фона окна во время работы программы?
- •Как в окне нарисовать прямоугольник?
- •Как в окне нарисовать закрашенный прямоугольник?
- •Какие фигуры, кроме прямоугольника, можно рисовать?
- •Как нарисовать линию?
- •Как нарисовать фигуру, полученную в виде совместного рисования нескольких фигур, например, прямоугольника и круга?
- •Как вывести в окно текст?
- •Как задать шрифт текста?
- •Как вывести текст в рамке?
- •Как загрузить изображение из файла?
- •Как вывести изображение в окно?
- •Как принудительно вызвать событие Paint, т.Е. Перерисовать окно?
- •Где объявлять переменные, значения которых нужны для всех функций окна?
- •Как сделать анимацию?
- •Как добавить в окно таймер?
- •Что такое элемент управления?
- •Как добавить в окно текстовое поле или кнопку?
- •Как получить текст,введенныйв текстовомполе?
- •Как понять, что была нажата кнопка и выполнить какие-то действия?
- •Что такое меню?
- •Как добавить в окно меню?
- •Как назначить действия, которые должны быть выполнены при выборе пункта меню?
- •Что такое диалог?
- •Как выбрать цвет с помощью диалога?
- •Как выбрать файл с помощью диалога?
- •Как загрузить изображение из файла, чтобы фон изображения считался прозрачным?
- •Как загрузить звуковой файл?
Как сделать анимацию?
Анимация представляет собой смену изображений окна через определенный промежуток времени. Каждый кадр представляет собой набор графических объектов в определенном состоянии и положении. Через некоторое время состояние и/или положение объекта должно измениться, и новый кадр должен быть нарисован заново. Таким образом, при формировании анимации требуется:
Создать переменные класса, которые будут хранить состояние объектов на кадре;
В зависимости от значений этих переменных рисовать кадр в функции-обработчике события Paint формы;
Создать таймер, который будет генерировать событие Tick через определенный интервал времени (интервал смены кадров);
В обработчике события Tick таймера предусмотреть изменение переменных, описывающих состояние объектов кадра, и вызвать перерисовку формы, чтобы отобразить новый кадр.
Например, пусть прямоугольник передвигается по диагонали из левого верхнего угла в правый нижний. При достижении края окна, он должен остановиться. Код обработчиков событий в классе Form1 может быть следующим:
public ref class Form1 : public System::Windows::Forms::Form
{
// переменные для хранения координат фигуры
int x, y;
Timer^ MyTimer;
public:
Form1(void)
{
InitializeComponent();
// начальные значения координат фигуры
x=0; y=0;
// запускаем таймер
MyTimer->Start();
}
protected:
~Form1()
{
if (components)
delete components;
}
private: System::ComponentModel::IContainer^ components;
#pragma region Windows Form Designer generated code
void InitializeComponent(void)
{
this->components = (gcnew System::ComponentModel::Container());
this->MyTimer = (gcnew System::Windows::Forms::Timer(this->
components));
this->SuspendLayout();
//
// MyTimer
//
// задаем интервал времени, через который будет срабатывать таймер
// (в миллисекундах)
this->MyTimer->Interval = 50;
// определяем обработчик события Tick
this->MyTimer->Tick += gcnew System::EventHandler(this,
&Form1::MyTimer_Tick);
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 266);
this->Name = L"Form1";
this->Text = L"Form1";
this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this,
&Form1::Form1_Paint);
this->ResumeLayout(false);
}
#pragma endregion
// обработчик события Paint
private: System::Void Form1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e) {
(e->Graphics)->FillRectangle(Brushes::MediumTurquoise,x,y,100,100);
}
// обработчик события таймера – изменение положения прямоугольника и
// вызов перерисовки окна
private: System::Void MyTimer_Tick(System::Object^ sender,
System::EventArgs^ e) {
// запоминаем текущие координаты прямоугольника
int prev_x = x, prev_y = y;
// изменение координаты x, если прямоугольник остается в окне
if (x + 50 < ClientSize.Width)
x += 5;
// изменение координаты y, если прямоугольник остается в окне
if (y + 50 < ClientSize.Height)
y += 5;
// если координаты прямоугольника не изменились, он достиг правого нижнего
// угла окна, поэтому можно остановить таймер
if (x == prev_x && y == prev_y)
MyTimer->Stop(); // остановка таймера
// вызов перерисовки окна
Refresh();
}
};