|
|
| Посл.отвђт | Сообщен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 |