Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

движение курсора мыши по кривой

25K
09 октября 2007 года
16alex
6 / / 07.05.2007
Нужно сделать чтобы при перемещении мыши указатель двигался по дуге до щелчка в одной из точек дуги, пытаюсь реализовать но курсор движится рывками
и тяжело им управлять.Привожу код,который меня не устраивает, помогите его модифицировать или предложите что-то свое:
код из обработчика перемещения мыши:


if (dc.GetPixel(point)!=RGB(255,0,255))
{
//AfxMessageBox("jfkdjfkd");
//поиск соседней точки нуженого цвета
for (p2.x=point.x-1; p2.x<=point.x+1; p2.x=p2.x+1)
for (p2.y=point.y-1; p2.y<=point.y+1; p2.y=p2.y+1)
if ((dc.GetPixel(p2)==RGB(255,0,255))&&(p2!=m_pointLast))
{
SetCursorPos(p2.x+m_MousePopravka.x,p2.y+m_MousePopravka.y);

m_pointLast=p2;
}
else
SetCursorPos(m_pointLast.x+m_MousePopravka.x,m_pointLast.y+m_MousePopravka.y);
//SetCursorPos(m_pointLast.x,m_pointLast.y);

}
else m_pointLast=point;
до начала цикла в m_pointLast находится крайняя точка дуги
point-содержит координаты возвращаемые OnMouseMove
RGB(255,0,255)-цвет дуги
Короче надеюсь на вас и уповаю, помогите ламеру
2.9K
10 октября 2007 года
Ation
96 / / 27.07.2004
1. после установки курсора надо выходить из цикла, иначе если несколько точек он будет прыгать.
2. что за m_MousePopravka?
3. надо определять направление последнего смещения курсора, и выбирать соответственно знак итераций в цикле (х увеличивался, тогда ищем справа, уменшался - слева; тоже для у)
25K
10 октября 2007 года
16alex
6 / / 07.05.2007
пожалуйста приведите код, а то у меня опять не получается видимо я вас недопонимаю,
а код снимит все вопросы
Поправка выглядит следующим образом:
CRect RectWindow;
int x,y, X_Size, Y_Size;
int cx,cy;

// GetWindowRect(RectWindow);
GetClientRect(RectWindow);

cx=GetSystemMetrics(SM_CXSCREEN);
cy=GetSystemMetrics(SM_CYSCREEN);

X_Size=RectWindow.right-RectWindow.left;
Y_Size=RectWindow.bottom-RectWindow.top;

m_MousePopravka.x=(int)((cx-X_Size)/2);
m_MousePopravka.y=(int)((cy-Y_Size)/2);
25K
13 октября 2007 года
16alex
6 / / 07.05.2007
ну неужели никто не знает
2.9K
13 октября 2007 года
Ation
96 / / 27.07.2004
Представим, что есть некая кривая, непрерывная на всей клиентской области и указатель в данный момент находится на одной из точек кривой. Эта позиция хранится в CursorOldPosition.
Произошло смещение указателя мыши, и новая позиция хранится в CursorNewPosition.
Код:
dx = CursorNewPosition.x - CursorOldPosition.x;
dy = CursorNewPosition.y - CursorOldPosition.y;

for (x = CursorOldPosition.x; x != CursorNewPosition.x; x += dx  )
     for (y = CursorOldPosition.y ; y != CursorNewPosition.y; y+=dy)
         if (<нужный цвет в точке (x,y)>)
             {
                   CursorOldPosition.x = x;
                   CursorOldPosition.y = y;
                   break;
              }
SetCursorPosition(CursorOldPosition);

// а поправка имхо не нужна, но я могу ошибаться.
Вот такой вот интуитивный код. После цикла либо в соседнюю точку, либо остается в старой.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог