Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
3 / 3 / 2
Регистрация: 27.07.2017
Сообщений: 22

MFC, CDialog, перехват координат курсора мышки

19.02.2018, 12:33. Показов 1968. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день.

Есть задача перехватить координаты курсора мышки внутри окна и за пределами диалогового окна. Исследую данную область. Если с перехватом внутри окна (как локальных координат окна, так и координат рабочего стола) проблем никаких, то с выходом за пределы окна начинаются проблемы: эвент WM_MOUSEMOVE срабатывает 1-2 раза, и всё. Потом эвент продолжает отлавливаться только если вновь провожу курсором над окном.

Какие можно попробовать способы решения и что почитать\посмотреть?

Студия - VS2010, ОС Win7
Ниже привожу пример обработчика событий, функцию OnMouseMove:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void CERngDlg::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    CRect rect;
    GetClientRect(&rect);
 
    if(!captured)
    {       
        if(point.x <=10 || point.y <=10 || point.x > rect.right || point.y > rect.bottom)
        {
            SetCapture(); captured=1;
        }
    }
    else
    {
        if(point.x >10 && point.y > 10 && point.x <= rect.right && point.y <= rect.bottom)
        {
            ReleaseCapture(); captured=0;
        }
    }
 
    float fval=0;
    CPoint g;
    GetCursorPos(&g);//Глобальные координаты
    /*Обновление координат*/
    DrawXY(point);
    msg.Format("x= %ld, y=%ld",g.x,g.y);
    m_glchctrl.SetWindowTextA(msg);
 
        ......
 
        CDialogEx::OnMouseMove(nFlags, point);
}
P.S. Про хук читал, но очень не хочется прибегать к данному методу перехвата.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.02.2018, 12:33
Ответы с готовыми решениями:

MFC CDialog
Простейший случай - подключаю диалог к SDI. При компиляции не видит класс диалога, хотя по нажатию точки выдает список его элементов ... ...

Рисование в CDialog (MFC)
Кто нибудь подскажите как узнать HWND диалога или любого его элемента А вообще мне нужно как-то при нажатии кнопки создавать окно в...

Считывание координат (x;y) курсора мышки
Всем доброго время препровождения Есть необходимость считать ось &quot;y&quot; курсора По алгоритму типа: Если зажата СКМ и значение оси...

1
3 / 3 / 2
Регистрация: 27.07.2017
Сообщений: 22
05.03.2018, 13:09  [ТС]
В общем, спасение утопающих - дело рук самих утопающих!!!

Вариант решения - через отдельный поток

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DWORD WINAPI NewThread_Count(void*dummy)
{
    CString msg="";
    CPoint p;
    CERngDlg *d = (CERngDlg*)(dummy);
    float fval=0;
    while(!fin)
    {
        Sleep(50);
        GetCursorPos(&g);
        msg.Format("x= %ld, y=%ld",g.x,g.y);
        d->m_glchctrl.SetWindowTextA(msg);
        p.x = g.x - GLOBAL_X;
        p.y = g.y - GLOBAL_Y;
        /*Обновление координат, обновление значения функции*/
        d->DrawXY(g,&fval);
        /*Проверка пересечения ELLIPCE_VAL*/
        d->CheckIntercept(g, fval, &(d->val_prev), ELLIPCE_VAL);
        d->CheckIntercept(g, fval, &(d->big_prev), ELLIPCE_BIG);
    }
    return 0;
}
Единственный недостаток - частота перехвата координат равна одному "тику".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.03.2018, 13:09
Помогаю со студенческими работами здесь

VC++ 6.0 (MFC) Dialog, : public CDialog - Как иниц-ть событие создания окна диалога?
Visual C++ 6.0 SP5 MFC - простой диало созданный встроенным мастером в общем мне нужно как диалог со всеми кнопками вырисовался...

функция Get Document не работает в CDialog. как получить документ в CDIalog
пишу прогу на DOc/view в MFc. есть обычный диалог с кнопкой. при нажатии на кнопку хочу получить указатель на документ используя функцию...

При опросе координат курсора и состояния кнопок мыши (int 33h ax=0003h), значение координат не изменяется
Не пойму в чём проблема. Графический режим, прога ждёт нажатия левой кнопки, после этого в регистры CX и DX автоматически помещается...

Перехват нажатия кнопок мышки.
Кто может скинуть или написать программу которая считала бы нажатие левой клавиши мыши? Я начал разбираться с хуками, но к сожалению не...

Полная замена клика мышки (перехват) WinApi
Доброе утро :) . Такой интересный вопрос ( раз спрашиваю.. значит не смог найти((( либо плохо поиском пользуюсь) . Я написал программку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru