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

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Обработка нажатия ENTER в оконной процедуре EditBo

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


Дата: Фев 7, 2003 11:26:04

Как обработать нажатие Enter в оконной процедуре EditBox'a, если EditBox имеет в качестве родителя диалог, и сабклассирован?
Пробую обработать WM_KEYDOWN, проверяю wParam, но это ничего
дает. WM_CHAR тоже не работает, так как менеджер диалогов Windows не вызывает TranslateMessage. Как быть, подскажите?

henic

p.s. Имеется ввиду приложение на базе диалога.


Дата: Фев 7, 2003 12:04:42

Попробуй сделать отдельную процедуру окна для EditBox`а и там обрабатывай Enter


Дата: Фев 7, 2003 13:22:00

Дело в том, что я в ней и обрабатываю Enter, но WM_KEYDOWN и WM_CHAR не работают


Дата: Фев 7, 2003 15:06:41

так примерно выглядит код
.code

; =================================================================
sta rt:
mov hInstance, FUNC(GetModuleHandle,NULL)

call main

invoke ExitProcess,eax


; =================================================================
mai n proc
Dialog "dialog","MS Sans Serif",8,WS_OVERLAPPED or WS_SYSMENU \
or DS_CENTER,6,50,50,250,250,1024

DlgEdit WS_TABSTOP or WS_BORDER or ES_AUTOVSCROLL,53,10,71,11,ED_LNAME
DlgEdit WS_TABSTOP or WS_BORDER or ES_AUTOVSCROLL,53,26,71,11,ED_MNAME
DlgEdit WS_TABSTOP or WS_BORDER or ES_AUTOVSCROLL,53,42,71,11,ED_FNAME
DlgStatic "text1" ,SS_LEFT,10,11,35,8,LBL_LNAME
DlgStatic "text2" ,SS_LEFT,27,27,20,10,LBL_FNAME
DlgStatic "text3" ,SS_LEFT,11,43,33,10,LBL_MNAME

CallModalDialog hInstance,0,dlgproc,NULL

ret

main endp

; =================================================================
dlgproc proc hWin:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD

.if uMsg == WM_INITDIALOG
mov hLname, FUNC(GetDlgItem,hWin,ED_LNAME)
mov hMname, FUNC(GetDlgItem,hWin,ED_MNAME)
mov hFname, FUNC(GetDlgItem,hWin,ED_FNAME)

invoke SetWindowLong,hLname,GWL_WNDPROC,TextRusProc
invoke SetWindowLong,hMname,GWL_WNDPROC,TextRusProc
invoke SetWindowLong,hFname,GWL_WNDPROC,TextRusProc
mov lpTextRusProc, eax

.elseif uMsg == WM_CLOSE
invoke EndDialog,hWin,0

.endif

xor eax, eax
ret

dlgproc endp

; =================================================================
TextRusProc proc hCtl:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD

.if uMsg == WM_KEYDOWN
; mov eax,wParam
; .if al == 13
invoke MessageBox, hCtl, SADD("Enter detected"), SADD("Message"),MB_OK
; .endif

.endif

invoke CallWindowProc,lpTextRusProc,hCtl,uMsg,wParam,lParam

ret

TextRusProc endp
; =================================================================
end start

так вот WM_KEYDOWN выдаёт мессагу при нажатии всех клавиш, кроме ALT, ENTER, F10 и PrintScrn/SysRq
подскажите сообщение, при котором ловится Enter.

Спасибо.
henic


Дата: Фев 7, 2003 15:39:54

Еще есть свойство "Want return" (это в VS) попробуй его поставить.


Дата: Фев 7, 2003 17:13:26

Попробуй WM_SYSKEYDOWN


Дата: Фев 10, 2003 08:33:43

WM_SYSKEYDOWN реагирует только на Alt и F10


Дата: Фев 10, 2003 10:45:30

Заработало только так:

TextRusProc proc hCtl:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD

.if uMsg == WM_GETDLGCODE
mov eax, DLGC_WANTALLKEYS
ret

.elseif uMsg == WM_KEYDOWN
mov eax,wParam
.if al == 13
invoke MessageBox, hCtl, SADD("Enter detected"), SADD("Message"),MB_OK
.endif
.endif

invoke CallWindowProc,lpTextRusProc,hCtl,uMsg,wParam,lParam

xor eax,eax
ret

TextRusProc endp


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