Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображение координат курсора, сильно тормозит 
V
    Опции темы
th1nker
Дата 15.5.2009, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Покоряю вселенную...
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 25.8.2008
Где: Калуга

Репутация: нет
Всего: 2



Привет всем!!! Помогите мне, пожалуйста, решить одну проблему...
Суть проблемы:
Я создаю программу, векторный редактор. Я хочу, чтобы в моей программе, как и в почти всех векторных редакторах, присутствовала возможность отображения текущих координат мыши. Я это реализовал. Все работает отлично, если не происходит графических обновлений формы (методом Invalidate(rect) ). Но если таковые все-таки присутствуют, например при создании какого-нибудь графического объекта (все происходит динамически, то есть пользователь жмет кнопку мыши, протягивает ее, и динамически отрисовывается создаваемая фигура, например как в CorelDraw), начинаются жуткие тормоза: координаты мыши отображаются рывками. То есть если я резко двигаю указатель мыши, по идее должны последовательно отображаться координаты всех пикселов, через которые я провожу указатель мыши, но такого не происходит. Доходит даже до абсурда, если резко двигать мышь в течении какого-то отрезка времени, отображающиеся координаты вообще не меняются. :(
Повторюсь, если не происходит активных графических обновлений, все работает отлично.

Может, стоит копать в сторону многопоточности?

Заранее благодарен...
PM MAIL   Вверх
antslava
Дата 15.5.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2008
Где: Одесса

Репутация: нет
Всего: 2



а можно исходник или пример кода где ты обрабатываешь координаты. Сорри навык телепатии еще не сильно развит.
PM MAIL ICQ Skype   Вверх
th1nker
Дата 15.5.2009, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Покоряю вселенную...
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 25.8.2008
Где: Калуга

Репутация: нет
Всего: 2



Цитата

а можно исходник или пример кода где ты обрабатываешь координаты. Сорри навык телепатии еще не сильно развит.


Можно конечноsmile

Код

................//здесь какой-то другой код
private void mainform_MouseMove(object sender, MouseEventArgs e)
{
    //здесь обрабатываю событие движения мыши
    ...
    toolStripCoordXY.Text = e.X + ", " + e.Y;
    ...
    //дальше идет другой код
    //в том числе и метод 
    this.Invalidate(rect);
    //метод paint(), в котором мы прорисовываем контрол
    //метод paint() довольно объемный
}


Если метод this.Invalidate(), исходя из текущего состояния программы, не выполняется, то все работает достаточно быстро.
PM MAIL   Вверх
DVariuS
Дата 16.5.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 10.2.2009
Где: Ukraine

Репутация: нет
Всего: 8



th1nker, у тебя слишком часто выполняется this.Invalidate() - достаточно ресурсоемкий метод. Попробуй снизить частоту вызова перерисовки формы, например:
Код

int i = 0;
................//здесь какой-то другой код
private void mainform_MouseMove(object sender, MouseEventArgs e)
{
    //здесь обрабатываю событие движения мыши
    ...
    toolStripCoordXY.Text = e.X + ", " + e.Y;
    ...
    //дальше идет другой код
    //в том числе и метод 
    if( i > 20)      //число 20 - не точно, вычилсяется методом тыка
    {
         this.Invalidate(rect);
         i = 0;
     }
     else
         i++;
    //метод paint(), в котором мы прорисовываем контрол
    //метод paint() довольно объемный
}

PM MAIL   Вверх
th1nker
Дата 16.5.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Покоряю вселенную...
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 25.8.2008
Где: Калуга

Репутация: нет
Всего: 2



DVariuS, спасибо тебе огромноеsmile 
Твой метод сработал. Причем даже если вместо числа 20 подставить число 1, все равно работает быстро и не тормозит.
Проблема решена, еще раз спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1252 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.