Rob Philpott
Хорошо, я предполагаю, что вы находитесь в мире WinForms здесь.
Что вы действительно делаете, так это разрабатываете пользовательский элемент управления - специализацию графического окна, которое также поддерживает наложение фигур. Первое, что следует отметить, это то, что любой рисунок должен быть сделан только в методе Paint, конечно же, не в событиях движения мыши.
Как это работает, все рисование идет в обработчике событий paint, и когда рисование необходимо, вы аннулируете() соответствующую область, это вызовет новую краску, и если вы сделаете это хорошо, ваш метод paint должен будет рисовать только в той области, которая нуждается в обновлении.
Итак, начните с получения нового класса из PictureBox, это будет "специализация" PictureBox, потому что мы расширяем его функциональность. Первое, что нужно сделать, это переопределить метод OnPaint, убедитесь, что вы вызываете метод base. (), так как это нарисует картинку, но затем мы можем добавить наш собственный код рисования, чтобы перейти сверху. Вот пример, который помещает Черный квадрат поверх изображения:
public class Box : PictureBox
{
protected override void OnPaint(PaintEventArgs pe)
{
// let the default draw the image
base.OnPaint(pe);
pe.Graphics.FillRectangle(System.Drawing.Brushes.Black, new System.Drawing.Rectangle(0, 0, Width - 100, Height - 100));
}
}
Это отправная точка. Измените код конструктора, чтобы создать новую коробку, а не новый PictureBox.
Отсюда это просто случай добавления логики для отслеживания ваших прямоугольников и выполнения перетаскивания - поэтому вам нужно будет перехватить события мыши, определить, когда происходит отслеживание (кнопка мыши удерживается нажатой), изменить размер выбранного прямоугольника и выдать Invalidate()s. Хороший контроль также должен реагировать на клавиатуру.
Разработка управления-это сложная и трудная задача для достижения совершенства, но это просто случай, когда вы продолжаете идти и подталкиваете его в правильном направлении, когда вы знакомитесь с вызовами и обратными вызовами, которые вам нужны.