Visual C++: рисуем многоугольник на Picturebox, "который не исчезает"
...имеется в виду, при изменении размеров окна или его перетаскивании. Небольшой пример, которым решили затруднение начинающего :) Код проверен в Visual Studio 2015.
Сделаем всё, как в этой заметке - на форме приложения Windows Forms расположим панельку panel1
с установленными свойствами AutoScroll = true
и Dock = Fill
, а на панельке - рисунок pictureBox1
со свойством SizeMode = AutoSize
и положением Location = 0; 21
(чтобы рисунок не закрывал верхнее меню). На форму также перетащим верхнее меню menuStrip1
, добавим в него элемент "Нарисовать", а в нём - какой-нибудь пункт, например, с названием "Многоугольник". Щелчок по этому пункту будет вызывать функцию отрисовки многоугольника. Её код также показывает, как организовать массив точек для изображения заштрихованного многоугольника:
private: System::Void многоугольникToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { Graphics ^g = pictureBox1->CreateGraphics(); Pen ^pen = gcnew Pen(Color::Blue, 1.0f); using namespace System::Drawing::Drawing2D; HatchBrush ^brush = gcnew HatchBrush(HatchStyle::ZigZag, Color::White, Color::Blue); int x = 50, y = 300, step = 50; Point p1 = Point(x, y), p2 = Point(x + step, y), p3 = Point(x + 2 * step, y + step), p4 = Point(x + 3 * step, y), p5 = Point(x + 5 * step, y - step), p6 = Point(x + 3 * step, y - 3 * step), p7 = Point(x + 2 * step, y - 5 * step); array <Point> ^points = { p1,p2,p3,p4,p5,p6,p7 }; g->DrawPolygon(pen, points); g->FillClosedCurve(brush, points); }
Чтобы рисунок занимал всю клиентскую часть окна формы, добавим также эту строчку в обработчик события Load
формы:
pictureBox1->Size = this->ClientSize;
и заставим программу перерисовывать многоугольник при изменении размеров окна (вставим показанную ниже строчку в обработчик события SizeChanged
нашей формы):
многоугольникToolStripMenuItem_Click (this,e);
Последнюю строчку можно также "повесить" на событие LocationChanged
формы, чтобы рисунок не исчезал, например, при "утаскивании" части окна за пределы экрана (мышкой за заголовок).
Третье место, куда можно добавить эту строчку кода - событие Scroll
от панели, чтобы рисунок регенерировался при отпускании полосы прокрутки.
вид окна этого примера
16.11.2018, 13:44 [2952 просмотра]