Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отследить вход/выход курсора в область 
:(
    Опции темы
Kostt
Дата 6.5.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте!
Подскажите, пожалуйста, как можно отследить вход курсора в область окна?
Заранее спасибо!
PM MAIL   Вверх
Greeen
Дата 6.5.2007, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 10
Всего: 18



Пусть CRect rc(100, 100, 200, 200) - область окна, вход в которую надо отловить.
Тогда ловишь WM_MOUSEMOVE
Код

void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
    if(rc.PtInRect(point))
        // мышь в области (100, 100, 200, 200)
    CDialog::OnMouseMove(nFlags, point);
}



--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Kostt
Дата 7.5.2007, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо! 
PM MAIL   Вверх
Kostt
Дата 7.5.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Все вроде бы ничего, но почему-то это не работает, когда курсор водится над дочерними окнами. Нужно в них создать обработчик и пересылать родителю сообщение? Помимо этого, с выходом из окна еще хуже. Пишу вот так:
Код

void CACADDialog::OnMouseMove( UINT nFlags, CPoint point )
{
    TRACKMOUSEEVENT tme;
    tme.cbSize = sizeof(tme);
    tme.hwndTrack = GetSafeHwnd();
    tme.dwFlags = TME_LEAVE;
    TrackMouseEvent(&tme);

    //Некие действия        
    __super::OnMouseMove(nFlags, point);
}

Отлавливаю ON_WM_MOUSELEAVE, отлавливается, но тож редко (опять же, возможно из-за того, что родительское окно загромождено дочерними), или так:
Код

void CACADDialog::OnMouseMove( UINT nFlags, CPoint point )
{
    CRect rect;
    GetClientRect( &rect );
    
    if( rect.PtInRect( point ) )
    {
        SetCapture();
                                //Некие действия
    }
    else
    {
        ReleaseCapture();
        //Некие действия
    }
    
    __super::OnMouseMove(nFlags, point);
}

тут предпологается, что весь MOUSEInput будет приходить ко мне, пока мы не вылезли из окошка - тож не так работает. 
PM MAIL   Вверх
Greeen
Дата 7.5.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 10
Всего: 18



Код

BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->message == WM_MOUSEMOVE)
        if(rc.PtInRect(CPoint(GET_X_LPARAM(pMsg->lParam), GET_Y_LPARAM(pMsg->lParam))))
            // Мышь в области
    return CDialog::PreTranslateMessage(pMsg);
}


Это сообщение отредактировал(а) Greeen - 7.5.2007, 11:56


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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