Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Различить нажатие двойное нажатие кнопки в MFC 
:(
    Опции темы
CityAC
Дата 31.12.2006, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Нужно 1) - на нажатие кнопки мыши сделать один обработчик, 2) - на двойное нажатие той же кнопки - другой.
Прога всегда попадает в обработчик 1). 
Ломал голову -  ни к чему хорошему не пришел.
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
CityAC
Дата 31.12.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Или все уже водку пьянствуют или это неразрешимая задача smile 
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
KelTron
Дата 31.12.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Придется выбрать что то одно smile 


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
_hunter
Дата 2.1.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 5
Всего: 98



есть два вариантоа:
самый простой: самостоятоельно реализуем в контроле функциональность двойного клика. недостаток -- время клика может не соответствовать выбранному пользователем.
заморочный:
в обработчике одинарного клика запускаем таймер/поток в котором ждем (например секунду) и попутно проверяем не было ли двойного клика (в соответствующем обработчике ставим соответствующий флаг).
недостаток -- двойной клик может быть выставлен > 1с (маловероятно)

можно еще попробовать узнать у системы время двойного клика (но это лучше в системном программировании спрашивать)


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
zkv
Дата 2.1.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 16
Всего: 92



Цитата(_hunter @  2.1.2007,  13:23 Найти цитируемый пост)
можно еще попробовать узнать у системы время двойного клика

Цитата(MSDN)

UINT GetDoubleClickTime(VOID);
The return value specifies the current double-click time, in milliseconds.

PM MAIL   Вверх
qqshonok
Дата 3.1.2007, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А две кнопки и поочерёдно скрывать их?
PM WWW   Вверх
CityAC
Дата 3.1.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(qqshonok @ 3.1.2007,  09:08)
А две кнопки и поочерёдно скрывать их?

Не красиво smile 
И вообще не то что я имел в виду.
Двойное нажатие мыши!

Это сообщение отредактировал(а) CityAC - 3.1.2007, 11:58
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
Earnest
Дата 10.1.2007, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Чтобы приходили сообщения WM_XBUTTONDBLCLK класс окна должен иметь стиль CS_DBLCLKS. И тогда приходят и WM_XBUTTONDOWN, и WM_XBUTTONDBLCLK, причем в случае двойного нажатия придут оба. Если в обработчике WM_XBUTTONDOWN сделать что-то нехорошее (например, фокус переставить, или просто долго сидеть), DBLCLK, конечно, не придет.
Поэтому реакцию нужно продумать так, чтобы она была непротиворечивой. 


--------------------
...
PM   Вверх
CityAC
Дата 11.1.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Чтобы приходили сообщения WM_XBUTTONDBLCLK класс окна должен иметь стиль CS_DBLCLKS

1. Как установить данный стиль, если окно создается статически?
2. А как можно на ЛистБоксе создать обработчик типа  WM_LBUTTONUP?
  К примеру, нужно чтобы при выборе элемента списка он выделялся не при нажатии клавиши мыши, а при отжатии?
  Вообще такое возможно? Среди доступных сообщений для Listbox(a)  я такого не нашел smile 
3. Как снять выделение с элемента в ListBox(e) (так чтобы вообще ни один элемент не был выделен?);



Это сообщение отредактировал(а) CityAC - 11.1.2007, 15:04
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
zkv
Дата 11.1.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 16
Всего: 92



1. SetClassLong(hwnd,GCL_STYLE,CS_DBLCLKS|GetClassLong(hwnd,GCL_STYLE));
2. Создать в родителе, и проверять, куда попадает точка в которую кликнули
 
Цитата(CityAC @  11.1.2007,  14:28 Найти цитируемый пост)
К примеру, нужно чтобы при выборе элемента списка он выделялся не при нажатии клавиши мыши, а при отжатии?

WM_LBUTTONUP - как раз сообщение об отжатии
PM MAIL   Вверх
CityAC
Дата 11.1.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(CityAC @ 11.1.2007,  14:28)

3. Как снять выделение с элемента в ListBox(e) (так чтобы вообще ни один элемент не был выделен?);

3. ..?

Цитата

2. Создать в родителе, и проверять, куда попадает точка в которую кликнули

Я пробовал, но при щелчке на листбоксе программа не попадает в обработчик родительского WM_LBUTTONUP.
 хотя должен по идее - в стилях листбокса выставлен Notify. Ничего не понимаю, может еще какой нюанс?

Это сообщение отредактировал(а) CityAC - 11.1.2007, 15:31
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
zkv
Дата 11.1.2007, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 16
Всего: 92



3. 
Цитата(MSDN)

CListBox::SetCurSel 
Selects a string and scrolls it into view, if necessary.

int SetCurSel(
   int nSelect 
);
Parameters
nSelect 
Specifies the zero-based index of the string to be selected. If nSelect is –1, the list box is set to have no selection. 

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


Бывалый
*


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

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



Цитата
Цитата

2. Создать в родителе, и проверять, куда попадает точка в которую кликнули


Я пробовал, но при щелчке на листбоксе программа не попадает в обработчик родительского WM_LBUTTONUP.
 хотя должен по идее - в стилях листбокса выставлен Notify. Ничего не понимаю, может еще какой нюанс?
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
zkv
Дата 12.1.2007, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 16
Всего: 92



Цитата(zkv @  11.1.2007,  15:05 Найти цитируемый пост)
2. Создать в родителе, и проверять, куда попадает точка в которую кликнули

похоже я ошибался, ситуация по-сложнее будет, видимо придется содавать класс-наследник для CListBox, а в нем уже переопределять обработчик WM_LBUTTONUP, но не буду ручаться, что это единственный вариант smile

PS овчинка стоит выделки?
PM MAIL   Вверх
Earnest
Дата 12.1.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(zkv @  12.1.2007,  08:24 Найти цитируемый пост)
но не буду ручаться, что это единственный вариант 

Не единственный, можно ловить сообщения в PreTranslateMessage родителя. Но вряд ли это поможет в смысле изменения поведения лист-бокса по выделению элементов. Разве что ловить также WM_LBUTTONDOWN (и проглатывать)? а на WM_LBUTTONUP устанавливать текущий элемент. Но криво как-то.



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


 




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


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

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