GDI+ быстрый вывод
От: Аноним  
Дата: 13.12.10 22:01
Оценка:
Появилась задача сделать выделение областей мышкой на форме. пробовал множество способов — у всех (кроме 1) при каждом движении курсора всё (или только линии выделения) безбожно мигает. Да и не смог нагуглить как в GDI+/c# выводить графику в реал-тайме.

Пытался глянуть исходники Paint.NET (где всё реализовано плавно и красиво), но там всё так запутано что неделя на разбор потребуется.

Нужно обновлять вывод при каждом движении мыши если левая кнопка зажата.

Способ приведённый ниже не мерцает но есть потребность в очистке от прошлых линий.
gr.Clear(Color.Transparent);
делает всё чёррным. как решить?
        protected override void OnMouseMove(MouseEventArgs e)
        {
            m_LastMouseLocation = e.Location;

            if (m_InChoosing)
            {
                Graphics gr = this.CreateGraphics();
                Pen p = new Pen(new SolidBrush(Color.Black), 0.1f);

                gr.DrawLine(p, m_ChooseBegPos, new Point(m_ChooseBegPos.X, m_LastMouseLocation.Y));
                gr.DrawLine(p, m_ChooseBegPos, new Point(m_LastMouseLocation.X, m_ChooseBegPos.Y));

                gr.DrawLine(p, new Point(m_ChooseBegPos.X, m_LastMouseLocation.Y), m_LastMouseLocation);
                gr.DrawLine(p, new Point(m_LastMouseLocation.X, m_ChooseBegPos.Y), m_LastMouseLocation);

                //base.Invalidate(new Rectangle(m_LastMouseLocation, new Size(1, 1)), false);
            }

            base.OnMouseMove(e);
        }


P.S. в Paint.NET видел, используются методы со словом Transform в Graphics.
может тут как-то можно их применить?


14.12.10 07:22: Перенесено из '.NET'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.