· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Обработка нажатия Enter в ListBox

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Сен 13, 2003 20:36:47

Как обработать нажатие клавиши Enter в ListBox?
Хотел использовать WM_VKEYTOITEM, но нажатие Enter'a не обнаруживается.


Дата: Сен 13, 2003 21:07:53

Sk. Inc.
А если следить за WM_KEYUP, WM_KEYDOWN?


Дата: Сен 13, 2003 21:12:06

Я как-то проверял spyx-ом и нашел WM_KEYDOWN


Дата: Сен 13, 2003 22:33:08

Sk. Inc.
Лучше переходите на List View. Там возможностей больше да и нажатия на клавиши ловить можно.


Дата: Сен 14, 2003 01:11:11

KiNDeR и Valery
ListBox находится на диалоговом окне и собственной процедуры обработки сообщений не имеет, имеется она только у диалогового окна, поэтому за WM_KEYUP и WM_KEYDOWN, я следить не могу.

Quantum
Можно использовать и ListView, но думаю, что для выбора из списка в два-три элемента проще использовать ListBox.
Кстати не нужно ко мне обращаться на Вы, лучше на ты.


Дата: Сен 14, 2003 05:25:36 · Поправил: KiNDeR

Sk. Inc.
ListBox находится на диалоговом окне и собственной процедуры обработки сообщений не имеет
А должна иметь? :-)

wm_VKeyToItem
Спpашивает владельца блока списка, что блок списка должен делать в ответ на сообщение wm_KeyDown.

Перечитай описание сообшения WM_VKEYTOITEM, там как раз и надо обрабатывать сообщение WM_KEYDOWN.


Исходник можешь показать?...


Дата: Сен 14, 2003 06:45:56

Sk. Inc.
ListBox должен иметь стиль LBS_WANTKEYBOARDINPUT.

лучше на ты
OK


Дата: Сен 14, 2003 22:35:19

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


Дата: Сен 15, 2003 23:32:31 · Поправил: Sk. Inc.

Опишу, что я делал в виде списка (так, наверно, понятней ;-)
1) Устанавливаю стиль LBS_WANTKEYBOARDINPUT для ListBox'a.
2) Прописываю в своей программе обработку сообщения WM_VKEYTOITEM.
3) Ставлю в отладчике (OllyDbg) бряк на обработку этого сообщения.
В результате отлавливаются все нажатия клавиш (программа приостанавливается), кроме Enter (плюс еще Tab и Escape, но они мне не нужны) :-(

KiNDeR
В архиве программа весит 150Kb (unrar.dll тяжелая), поэтому приаттачить ее к сообщению не смогу.


Дата: Сен 16, 2003 01:03:44

Все дело в оконной функции ListBox которая обрабатывает сама часть сообщений, среди них и WM_KEYDOWN, в результате обработки которого и отсылаются WM_VKEYTOITEM и WM_CHARTOITEM.

Попробуй subclass окна. Должно помочь.


Дата: Сен 16, 2003 01:24:22

Хотел использовать WM_VKEYTOITEM, но нажатие Enter'a не обнаруживается.
Всё обнаруживается.
Как ты её обнаруживаешь и где?
В ListBox должен быть установлен флаг LBS_WANTKEYBOARDINPUT.
Тогда будет посылаться к родительскому окну WM_VKEYTOITEM
в родительском проверь на WM_VKEYTOITEM
word ptr wParam должен быть 13 если Enter.
lParam - от кого пришёл.


Дата: Сен 16, 2003 01:27:32

DaemoniacaL
Попробуй subclass окна...
А как это сделать? Может лучше хук на клаву повесить?


Дата: Сен 16, 2003 01:30:53 · Поправил: The Svin

Алло!!!
Всё нормально обнаруживается, второй раз повторяю.
Какие хуки? Какие сабклассы? Это банальная штатная работа.


Дата: Сен 16, 2003 01:31:00

The Svin
Так дело-то в том, что при нажатии Enter сообщение к родительскому окну WM_VKEYTOITEM не посылается.
Может что-то глючит (или я, например)?


Дата: Сен 16, 2003 01:33:03

Повторяю у ListBox поставь во флагах LBS_WANTKEYBOARDINPUT.

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.094