Как выбрать перерисовать фигуры, сохраняя другие нетронутыми - PullRequest
1 голос
/ 08 марта 2012

Я работаю над приложением Window CE с пользовательским управлением.

В пользовательском элементе управления я рисую три круга (один заполненный круг), одну стрелку, один текст и одну линию вручную. Это как селектор угла в фотошопе.

Теперь, когда я перемещаю курсор, завершаю перерисовку элемента управления и вызываю мерцающий эффект.

Я пробовал рисовать элементы управления сначала в растровом изображении, а затем в последнем рисовании этого растрового изображения, используя метод e.drawimage (), но та же проблема мерцания.

Теперь у меня есть только 2 фигуры (стрелка + линия), которые необходимо перерисовать, другие со статическим поведением .

Так что мой вопрос, есть ли способ выборочного рисования фигур, сохраняя другие нетронутыми. Сначала нарисуйте все фигуры, но затем нарисуйте стрелку и линию, оставив все остальные фигуры в этом месте нетронутыми.

Это то, что я делаю в

метод переопределения onPiant.

using (SolidBrush inLineFill = new SolidBrush(circleColor))
{
  Point[]  polyPoints = ...;                              
  e.Graphics.DrawLine(....);
  e.Graphics.FillPolygon(inLineFill, polyPoints);
  if (firstTime)
  {
    e.Graphics.DrawEllipse(...);
    e.Graphics.DrawEllipse(...);
    e.Graphics.DrawEllipse(...);
    e.Graphics.FillEllipse(...);
    e.Graphics.DrawString(...);
    firstTime = false ;
  }
}

Я впервые вижу полный контроль, но после этого вижу только стрелку с линией.

1 Ответ

2 голосов
/ 08 марта 2012

Вероятно, вы можете сделать несколько вещей, чтобы улучшить поведение.

  • Переопределить OnPaintBackground и оставить его пустым
  • Кэшировать, что SolidBrush вместо создания нового каждый раз, когда OnPaint являетсяnamed
  • Нарисуйте все статические фигуры для растрового изображения уровня элемента, которое вы кэшируете.В OnPaint создайте DrawImage этого изображения, затем свою стрелку и линию (изменяющийся материал).
  • Сделайте весь этот рисунок в растровое изображение (которое вы кешируете, а не создаете каждый раз), затем DrawImage это вэкранная графика
  • Если у вас нет перекрывающихся элементов и у вас есть разумные прямоугольные области, установка области обрезки для окружения ваших изменений предотвратит ненужное рисование
...