У меня есть трудности с использованием полос прокрутки с подклассом UserControl. Я использовал DrawTools 2005 (из CodeProject) для рендеринга средних размеров (500 ребер). Я добавил к ней возможность прокрутки с помощью H/V-баров. Теперь я вижу, что использование горизонтальной полосы прокрутки искажается, как показано на экране.Puzzled 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();
}
В качестве примечания я пробовал как с , так и без него, но это приводит к другой ошибке, как показано на картинке в предыдущей ссылке.
Интересно, если метод UserControl.Paint
является потокобезопасным или нет?
Может ли кто-то пролить свет на это?
Использование TranslateTransform() не требуется. Есть некоторый намек на то, что вы вызываете FrameRgn(), он не знает о состоянии объекта Graphics. Вам придется компенсировать регион самостоятельно. Вместо этого используйте Graphics.DrawPath(). –
Хорошо. Я использую Region, потому что в коде используется функция CreateRoundRectRgn GDI, этот регион был оформлен, как вы уже догадались. Как я могу перейти от CreateRoundRectRgn к графическому пути? –
Просто используйте GraphicsPath.AddArc и AddLine. 8 строк кода не должны мешать вам. –