![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Почему-то в ListView не перехватывается нажатие Enter. Я смотрел нотификационное сообшение LVN_KEYDOWN, использовал subclassing и перехватывал посылаемые ListView сообщения WM_SYSKEYDOWN, WM_KEYDOWN, WM_CHAR, но нажатие Enter нигде обнаружено не было. Интересно, что нажатие Enter в Edit'е успешно перехватывается в WM_KEYDOWN. Может, кто подскажет, что с этим делать?
|
|||
|
||||
| Pulse69 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 28.4.2006 Где: Хабаровск Репутация: 8 Всего: 10 |
Наш любимый МСДН:
NM_RETURN (list view) Notification -------------------------------------------------------------------------------- Notifies a list-view control's parent window that the control has the input focus and that the user has pressed the ENTER key. NM_RETURN is sent in the form of a WM_NOTIFY message. --------------------
Ctrl+Alt+Reset |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Это очень странно, но NM_RETURN тоже не перехватывается...
Добавлено @ 12:20 Вот моя тестовая программка
|
|||
|
||||
| Pulse69 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 28.4.2006 Где: Хабаровск Репутация: 8 Всего: 10 |
У тебя List-View в диалоге, вся проблема именно в этом. Я с таким как-то сталкивался. В MSDN Magazine есть статья примерно на такую тему. Если у тебя VS2005, посмотри эту ссылку:
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/dnmag00/html/c0700.htm Суть в том, что мне пришлось создавать таблицу акселераторов с VK_RETURN, а затем обрабатывать сообщение от акселератора. По-другому я не знаю как. PS: Xотя нет, знаю. Не пиши для диалога =) --------------------
Ctrl+Alt+Reset |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Спасибо большое!
|
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Кстати, в MFC, оказывается, перехватить нажатие Enter еще сложнее, потому что диалоговое окно при его нажатии закрывается
Даже, если нет кнопки по кмолчанию... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
В MFC как раз проще - там есть волшебная функция PreTranslateMessage.
-------------------- ... |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Буду знать
|
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Есть решение проблемы! Оказывается, существует сообщение WM_GETDLGCODE. Оно посылается функции окна элемента управления. Возвращенное из функции окна значение говорит, какие клавиши ты хочешь обрабатывать сам. Windows при нажатии этих клавиш не будет сам ничего делать (кроме как ставить очередное сообщение в очередь). С моим ListView это проходит!
|
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Обнаружилась странная вещь
Функции диалогового окна, несмотря на то что она не есть "the window procedure associated with a control" (MSDN), WM_GETDLGCODE все равно приходит. Правда, толку от него мало: Enter в диалоговом окне не ловится Это сообщение отредактировал(а) 0x07L - 11.7.2006, 09:41 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Ты немного не так понял. Существует стандартная обработка некоторых клавиш в диалоге
Но если в оконной функции контрола в ответ на WM_GETDLGCODE возвратить определенные значения, то это стандартное поведение можно изменить. А ENTER попробуй ловить как WM_CHAR с соответствующим ASCII-кодом, а не WM_KEYDOWN. -------------------- ... |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Глупый вопрос: а как сделать так, чтобы в функцию диалога приходил WM_CHAR?
|
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: нет Всего: 11 |
Создать обработчик этого сообщения? -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Обработчик-то есть:
Это сообщение отредактировал(а) 0x07L - 11.7.2006, 09:43 |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: нет Всего: 11 |
А WM_KEYDOWN тоже не ловится? Spy++ смотрел какие сообщения приходят?
-------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |