你有沒有定時DrawCurve
需要多長時間?也許它足夠快,可以實時進行。不要忘記,GDI會將繪圖原語剪切到繪圖區域。您只需在您移動鼠標時設置剪切矩形。
爲了加速重繪,創建主窗口圖像(您粘貼的那個)作爲離屏位圖,並在屏幕上顯示屏幕上的屏幕版本。這樣你可以減少DrawCurve
的影響。
最後,爲了獲得好看的結果,重載OnPaintBackground
(記不清名字,但是它是這樣的),所以它什麼都不做(甚至不用調用基類)並在OnPaint
方法中執行所有的繪製使用一個BufferedGraphics
對象。
更新
你的油漆的功能可能是這樣的:
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
}
這將產生相對於鼠標位置的浮動「窗口」。
嗯,我認爲它繪製te曲線相當快(我粗略猜測大約10毫秒)。你能解釋更多關於使用鼠標懸停剪輯的事件嗎? –
@ Sean87:查看更新的答案。當鼠標移動並且縮放功能啓用時,重新繪製窗口。 – Skizz