| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Различить нажатие двойное нажатие кнопки в MFC |
| Автор: CityAC 31.12.2006, 01:24 |
| Нужно 1) - на нажатие кнопки мыши сделать один обработчик, 2) - на двойное нажатие той же кнопки - другой. Прога всегда попадает в обработчик 1). Ломал голову - ни к чему хорошему не пришел. |
| Автор: CityAC 31.12.2006, 12:49 |
| Или все уже водку пьянствуют или это неразрешимая задача |
| Автор: KelTron 31.12.2006, 13:06 |
| Придется выбрать что то одно |
| Автор: _hunter 2.1.2007, 13:23 |
| есть два вариантоа: самый простой: самостоятоельно реализуем в контроле функциональность двойного клика. недостаток -- время клика может не соответствовать выбранному пользователем. заморочный: в обработчике одинарного клика запускаем таймер/поток в котором ждем (например секунду) и попутно проверяем не было ли двойного клика (в соответствующем обработчике ставим соответствующий флаг). недостаток -- двойной клик может быть выставлен > 1с (маловероятно) можно еще попробовать узнать у системы время двойного клика (но это лучше в системном программировании спрашивать) |
| Автор: zkv 2.1.2007, 18:28 | ||
|
| Автор: qqshonok 3.1.2007, 09:08 |
| А две кнопки и поочерёдно скрывать их? |
| Автор: CityAC 3.1.2007, 11:56 | ||
Не красиво И вообще не то что я имел в виду. Двойное нажатие мыши! |
| Автор: Earnest 10.1.2007, 20:20 |
| Чтобы приходили сообщения WM_XBUTTONDBLCLK класс окна должен иметь стиль CS_DBLCLKS. И тогда приходят и WM_XBUTTONDOWN, и WM_XBUTTONDBLCLK, причем в случае двойного нажатия придут оба. Если в обработчике WM_XBUTTONDOWN сделать что-то нехорошее (например, фокус переставить, или просто долго сидеть), DBLCLK, конечно, не придет. Поэтому реакцию нужно продумать так, чтобы она была непротиворечивой. |
| Автор: CityAC 11.1.2007, 14:28 | ||
1. Как установить данный стиль, если окно создается статически? 2. А как можно на ЛистБоксе создать обработчик типа WM_LBUTTONUP? К примеру, нужно чтобы при выборе элемента списка он выделялся не при нажатии клавиши мыши, а при отжатии? Вообще такое возможно? Среди доступных сообщений для Listbox(a) я такого не нашел 3. Как снять выделение с элемента в ListBox(e) (так чтобы вообще ни один элемент не был выделен?); |
| Автор: CityAC 11.1.2007, 15:25 | ||||
3. ..?
Я пробовал, но при щелчке на листбоксе программа не попадает в обработчик родительского WM_LBUTTONUP. хотя должен по идее - в стилях листбокса выставлен Notify. Ничего не понимаю, может еще какой нюанс? |
| Автор: zkv 11.1.2007, 15:32 | ||
3.
|
| Автор: CityAC 11.1.2007, 15:41 | ||
Цитата
Я пробовал, но при щелчке на листбоксе программа не попадает в обработчик родительского WM_LBUTTONUP. хотя должен по идее - в стилях листбокса выставлен Notify. Ничего не понимаю, может еще какой нюанс? |
| Автор: zkv 12.1.2007, 07:24 | ||
похоже я ошибался, ситуация по-сложнее будет, видимо придется содавать класс-наследник для CListBox, а в нем уже переопределять обработчик WM_LBUTTONUP, но не буду ручаться, что это единственный вариант PS овчинка стоит выделки? |
| Автор: Earnest 12.1.2007, 17:48 |
Не единственный, можно ловить сообщения в PreTranslateMessage родителя. Но вряд ли это поможет в смысле изменения поведения лист-бокса по выделению элементов. Разве что ловить также WM_LBUTTONDOWN (и проглатывать)? а на WM_LBUTTONUP устанавливать текущий элемент. Но криво как-то. |