Здравствуйте, Dmitry Ostrikov, Вы писали:
DO>Для окна расположенного на диалоге, можно проанализировать lParam, который содержит информацию о мессадже WM_KEYDOWN и вернуть DLGC_WANTMESSAGE.
а работает? чего-то у меня не получалось, а может что написал криво. Примерчик с кодом можно?
Для диалога можно задать accelerator на Enter, и в оконной процедуре диалога ловить его, затем смотреть на каком поле стоит фокус, и соответственно работать уже с этим полем
Re: Как обработать нажатие Enter в edit box'е?
От:
Аноним
Дата:
19.02.05 13:59
Оценка:
Здравствуйте, Игорь Вартанов, Вы писали:
ИВ>Статья:
Здравствуйте, Игорь Вартанов, Вы писали:
ИВ>Начнем с того, что для обработки нажатия Enter необходимо, чтобы (в общем случае) окно редактирования ожидало этого нажатия ИВ>(т.е. имело стиль ES_MULTILINE). В противном случае система выполнит трансляцию этого нажатия в нажатие кнопки родительского окна, ИВ>имеющей в текущий момент стиль BS_DEFAULTPUSHBUTTON. Кстати, это довольно неплохая методика для диалога, содержащего единственное окно ввода ИВ>и имеющего кнопку по-умолчанию OK. Если же диалог (или окно) имеет несколько окон ввода, и логика работы приложения подразумевает, что нажатие Enter ИВ>означает окончание ввода в выбранном окне и перевод фокуса на следующее, то скорее всего вам подойдет нижеследующая методика.
... ИВ>Не всегда целесообразно обработку нажатия Enter возлагать на окно редактирования. Если в поведение приложения необходимо добавить указанную реакцию, ИВ>но для самого окна достаточно обычной функциональности (однострочное окно редактирования), можно, не меняя стиля окна редактирования, самостоятельно ИВ>обрабатывать нажатие Enter, анализируя содержимое сообщений в цикле обработки сообщений. ИВ>Необходимо помнить, что цикл обработки сообщений модального диалога реализуется самой системой и недоступен для программиста. В этом случае остается ИВ>единственное средство — подмена оконной процедуры окна редактирования, описанная выше (см. Основной вариант).
За бортом оказалась очень простая практика без всякого сабклассирования:
если диалог именно модальный (например — по DialogBoxParam),
все окна редактирования именно БЕЗ ES_MULTILINE,
кнопки с bs_DEFpushbutton вообще нет,
как и контролов с ID =IDOK, —
то все решается в DlgProc по WM_COMMAND и тесту на фокус.
Не смотрите на эту статью как на статью про CEDit, иногда приходится ловить сообщения и от других элементов, а когда сообщений много, тогда легче наследовать.
Не все элементы могут быть в диалог, etc...