Шаг 52.
Microsoft Visual C++ 2010. Начала.
Программирование. Графика. Компонент PictureBox

    На этом шаге мы рассмотрим назначение и использование этого компонента.

    Начиная с этого шага, мы рассмотрим вопросы, связанные с отображением на форме иллюстрации, фотографии или картинки, сформированной из графических примитивов (линий, прямоугольников, окружностей). Также рассмотрим основные принципы создания анимации.

    Отображение графики обеспечивает компонент PictureBox (рисунок 1).


Рис.1. Компонент PictureBox

    Подобно тому, как художник рисует на поверхности холста, программа "рисует" на графической поверхности компонента PictureBox.

    Графическая поверхность компонента PictureBox представляет собой объект Graphics, методы которого и обеспечивают вывод графики. Таким образом, для того чтобы на поверхности компонента PictureBox появилась линия, прямоугольник, окружность или загруженная из файла иллюстрация, необходимо вызвать соответствующий метод объекта Graphics.

    Доступ к графической поверхности объекта (свойству Graphics) есть только у функции обработки события Paint. Поэтому сформировать (отобразить) графику может только она. Здесь следует вспомнить, что событие Paint возникает в начале работы программы, когда ее окно, а следовательно, и все компоненты появляются на экране, а также во время работы программы всякий раз, когда окно или его часть вновь появляется на экране, например, после того, как пользователь сдвинет другое окно, частично или полностью перекрывающее окно программы, или развернет свернутое окно.

    Создается процедура обработки события Paint обычным образом: сначала надо выбрать компонент PictureBox, затем в окне Properties (Свойства) открыть вкладку Events (События) и в поле события Paint ввести имя функции обработки события (или сделать двойной щелчок левой кнопкой мыши).

    В качестве примера ниже приведена функция обработки события Paint компонента PictureBox, которая в поле компонента рисует итальянский флаг. Обратите внимание: доступ к объекту Graphics обеспечивает параметр e функции обработки события.


Рис.2. Приложение на этапе разработки


Рис.3. Приложение на этапе выполнения

    Текст обработки события Paint:

private: System::Void pictureBox1_Paint(System::Object^  sender, 
		System::Windows::Forms::PaintEventArgs^  e) {
	int x,y; // левый верхний угол 
	int w,h; // ширина и высота полосы 
	x = 10; 
	y = 10; 
	w = 28; 
	h = 60; 
	// зеленая полоса 
	e->Graphics->FillRectangle(System::Drawing::Brushes::Green, 
		x,y,w,h); 
	// белая полоса 
	x += w; 
	e->Graphics->FillRectangle(System::Drawing::Brushes::White, 
		x,y,w,h);
	// красная полоса 
	x += w; 
	e->Graphics->FillRectangle(System::Drawing::Brushes::Red, 
		x,y,w,h); 
	// Подпись. 
	// Используется шрифт, заданный свойством Font формы. 
	e->Graphics->DrawString("Италия",this->Font, 
		System::Drawing::Brushes::Black, 10, 80);
 }
Архив проекта можно взять здесь.

    На следующем шаге мы рассмотрим графическую поверхность.




Предыдущий шаг Содержание Следующий шаг