БлогNot. Visual C++: рисуем многоугольник на Picturebox, "который не исчезает"

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 [2750 просмотров]


теги: графика c++/cli

показать комментарии (1)