Я могу дать вам только приблизительное описание форм Windows Forms здесь.В WPF вы можете использовать Adorner
s, и там есть учебники, как это сделать.Здесь мы рассмотрим ручной процесс в Windows Forms:
Во-первых, массив вершин должен быть переменной-членом класса и должен инициализироваться только один раз в начале программы.
Затем нарисуйте многоугольник с текущим набором вершин, как вы делаете сейчас.Кроме того, нарисуйте несколько «ручек», если хотите, чтобы вы знали, что вершины можно захватывать (это могут быть прямоугольники вокруг фактического PointF
).
Теперь для магии :-) Назначьте MouseDown
, MouseMove
и MouseUp
события для элемента управления, который вы используете для отображения изображения.Кроме того, создайте новую переменную-член bool m_draggingVertex
и другую переменную, содержащую индекс для массива вершин перетаскиваемой в данный момент вершины.
In MouseDown
:
Проверьте, является ли текущая позиция мышив пределах диапазона вершины (я бы предположил, что вокруг вершины есть прямоугольник 5x5, чтобы его было легче попасть курсором).Если вы нажали кнопку на вершине, установите m_draggingVertex
на true
и сохраните индекс вершины в другой переменной.
In MouseMove
:
Если m_draggingVertex
равно true
, измените вершина с индексом, сохраненным выше, на новые координаты, пересчитайте свои позиции и перекрасьте так, чтобы отображалась текущая позиция вершины.
In MouseUp
:
Если m_draggingVertex
равноtrue
, установите его на false
и сделайте окончательную работу.
Вот как я это сделаю ...