· Начало · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› WM_CHAR в edit`e

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


Дата: Июн 1, 2004 19:08:42 · Поправил: a111

Помогите разобраться, сам уже никак не могу.
У меня есть модальное диалоговое окно, а на нем edit-control.
Как мне узнать, что был нажат enter, при фокусе на этом edit`e?
Пробовол отловить по WM_CHAR, но не получается так как нужно TranslateMessage, а ее нету, так как окошко создается из ресурса и обрабатывает сообщения по-особому(через свою процедуру).
Вопрос: как быть?


Дата: Июн 1, 2004 19:22:16

.IF uMsg == WM_COMMAND
   mov eax,wParam
   .IF ax == IDOK
      invoke GetFocus
      .IF eax == hMyEditControl
          ; Это был Enter :-)
      .ENDIF
   .ENDIF
.ENDIF
ЗЫ: Извиняюсь за макросы, но так понятней.


Дата: Июн 1, 2004 20:05:52

Чего-то не выходит.
Edit вообще не получает WM_COMMAND при нажатии enter`a.

Можно ли как-нибудь поймать WM_CHAR, и через него и фокус определить, что это enter. Но куда присобачить Translatemessage?


Дата: Июн 1, 2004 20:13:15 · Поправил: Quantum

WM_COMMAND получает не Edit, а процедура диалогового окна. Ещё предполагается, что окно имеет дефолтовую кнопку с идентификатором IDOK. Всё работает.


Дата: Июн 1, 2004 20:32:58

Кнопку в смысле button?
Но я все это затеял потому что хочу вводить текст не переводя фокус, а автоматом.


Дата: Июн 1, 2004 20:44:46

a111
Поправочка: кнопки может и не быть. Только что проверил.


Дата: Июн 1, 2004 21:04:47 · Поправил: a111

Для интереса сделал так:
.if umsg==WM_COMMAND
mov eax,wparam
.if lparam!=0
.if ax==ID_EDIT
int 3h
.endif
.endif
.endif
При нажатии enter на edit программа не прерывается.

Как ее отследить, что это был именно enter, ведь в edit набивается строчка, а в конце он самый?

p.s Как заставить работать оформление сообщения в форуме(кнопочки над вводом)?


Дата: Июн 1, 2004 21:22:01

a111
Не ID_EDIT, а IDOK!!!


Дата: Июн 1, 2004 22:11:22

А я просто сабклассинг делал - мне еще надо было пару фич добавить.


Дата: Июн 2, 2004 09:43:29

Никак не пойму, а причем тут idok?
Мы ведь enter жмем когда стоим в edit`e.
И почему должно прийти WM_COMMAND из-за кнопки?


Дата: Июн 2, 2004 09:56:13

Когда жмешь ентер в едите, РОДИТЕЛЬСКОМУ ОКНУ посылается сообщение WM_COMMAND с указанием контрола, и условного кода. Вот этот условный код для енетера и есть IDOK. А контрол - это твой IDC_EDIT1.
Все просто как самогонный аппарат!
Кстати, это я когда-то давно прочитал в МСДНе (про сообщения, а не про аппарат).


Дата: Июн 2, 2004 10:36:37

Спасибо всем, заработало!