Вы рассчитали, сколько времени займет DrawCurve
?Возможно, это достаточно быстро, чтобы сделать в режиме реального времени.Не забывайте, что GDI будет обрезать примитивы рисования в области рисования.Вам просто нужно установить обтравочный прямоугольник при перемещении мыши.
Чтобы ускорить перерисовку, создайте изображение главного окна (то, которое вы вставили) в виде закадрового растрового изображения, и просто DrawImage
внеэкранная версия окна в событиях рисования.Таким образом, вы уменьшаете влияние DrawCurve
.
Наконец, чтобы получить хорошо выглядящие результаты, перегрузите OnPaintBackground
(не могу точно вспомнить имя, но это что-то в этом роде), поэтому он ничего не делает (даже не вызывайте базовый класс) и выполняйте все свои рисования в методе OnPaint
, используя объект BufferedGraphics
.
Обновление
Ваша функция рисования может выглядеть следующим образомthis:
OnPaint (...)
{
the_graphics_object.DrawImage (the background image);
the_graphics_object.Clip = new Region (new Rectangle (coords relative to mouse position));
the_graphics_object.TranslateTransform (drawing offset based on mouse position);
RenderScene (the_graphics_object, scale_factor); // draws grid and curve, etc
the_graphics_object.DrawRectangle (zoom view rectangle); // draw a frame around the zoomed view
}
Это создаст плавающее «окно» относительно положения мыши.