我有一些困難與UserControl的子類使用滾動條。我使用DrawTools 2005(來自CodeProject)渲染中等尺寸的圖形(500條邊)。我給它添加了用H/V條滾動的可能性。現在我可以看到,使用水平滾動條時,圖形會如屏幕截圖所示出現亂碼。困惑的UserControl OnPaint與滾動條
我的問題是:如何在UserControl中實現繪圖,使用ScollBars的控件?
爲DrawTool 2005實用鏈接: http://www.codeproject.com/Articles/8494/DrawTools
要看到錯亂的樣子見下圖 http://arnault-bonafos.123siteweb.fr/311699731
代碼繪製如下所示:
private void CanvasArea_Paint(object sender, PaintEventArgs e)
{
//e.Graphics.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
SolidBrush brush = new SolidBrush(Color.FromArgb(255, 255, 255));//Color.FromArgb(127, 127, 127)); //Color.FromArgb(255, 255, 255));
e.Graphics.FillRectangle(brush,
this.ClientRectangle);
if (canvasDocument != null)
{
canvasDocument.Draw(e.Graphics);
}
brush.Dispose();
}
作爲一個說明,我嘗試了使用或不使用TranslateTransform
,但它導致了其他錯誤,如上圖所示。
不知道UserControl.Paint
方法是否線程安全?
有人可以對此有所瞭解嗎?
需要使用TranslateTransform()。有一些提示您勾住FrameRgn(),它不知道Graphics對象的狀態。你必須自己抵消該地區。請改用Graphics.DrawPath()。 –
好的。我使用區域,因爲代碼使用CreateRoundRectRgn GDI函數,這個區域被框住,因爲你猜對了。我如何從CreateRoundRectRgn轉到圖形路徑? –
只需使用GraphicsPath.AddArc和AddLine。 8行代碼不應該減慢你的速度。 –