如何攔截在Edit上按下的Return?(win32 project)
-
g_hDlgWnd=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_DIALOG_TEST),hWnd,(DLGPROC)DlgTestProc); ShowWindow(g_hDlgWnd, SW_SHOWNORMAL); 以function建立一個Dialog(IDD_DIALOG_TEST),在IDD_DIALOG_TEST加入一個IDC_EDIT_INPUTTEXT(Edit Control) 我想在IDC_EDIT_INPUTTEXT按下Return時Call其他的Function, 問題就是:如何攔截在Edit上按下的Return?(win32 project) INT_PTR CALLBACK DlgTestProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { long rvalue = 0; /* int processed = CGM.WinProc(hDlg, message, wParam, lParam, &rvalue); if (processed) return rvalue; */ switch(message) { case WM_INITDIALOG: return Test_OnInitialDialog(hDlg); case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_EDIT_INPUTTEXT: { switch (HIWORD (wParam)) { //case VK_RETURN: // TRACE("VK_RETURN\n"); // break; case EN_CHANGE: { CHAR lpszPassword[MAX_TALK_WORD]; WORD cchPassword; cchPassword = (WORD) SendDlgItemMessage(hDlg, IDC_EDIT_INPUTTEXT, EM_LINELENGTH, (WPARAM) 0, (LPARAM) 0); *((LPWORD)lpszPassword) = cchPassword; // Get the characters. SendDlgItemMessage(hDlg, IDC_EDIT_INPUTTEXT, EM_GETLINE, (WPARAM) 0, // line 0 (LPARAM) lpszPassword); // Null-terminate the string. lpszPassword[cchPassword] = 0; TRACE(">>>> cchPassword=%d ,lpszPassword=%s \n",cchPassword,lpszPassword); } TRACE("IDC_EDIT_INPUTTEXT %d,%d\n",wParam,lParam); break; } } break;
-
g_hDlgWnd=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_DIALOG_TEST),hWnd,(DLGPROC)DlgTestProc); ShowWindow(g_hDlgWnd, SW_SHOWNORMAL); 以function建立一個Dialog(IDD_DIALOG_TEST),在IDD_DIALOG_TEST加入一個IDC_EDIT_INPUTTEXT(Edit Control) 我想在IDC_EDIT_INPUTTEXT按下Return時Call其他的Function, 問題就是:如何攔截在Edit上按下的Return?(win32 project) INT_PTR CALLBACK DlgTestProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { long rvalue = 0; /* int processed = CGM.WinProc(hDlg, message, wParam, lParam, &rvalue); if (processed) return rvalue; */ switch(message) { case WM_INITDIALOG: return Test_OnInitialDialog(hDlg); case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_EDIT_INPUTTEXT: { switch (HIWORD (wParam)) { //case VK_RETURN: // TRACE("VK_RETURN\n"); // break; case EN_CHANGE: { CHAR lpszPassword[MAX_TALK_WORD]; WORD cchPassword; cchPassword = (WORD) SendDlgItemMessage(hDlg, IDC_EDIT_INPUTTEXT, EM_LINELENGTH, (WPARAM) 0, (LPARAM) 0); *((LPWORD)lpszPassword) = cchPassword; // Get the characters. SendDlgItemMessage(hDlg, IDC_EDIT_INPUTTEXT, EM_GETLINE, (WPARAM) 0, // line 0 (LPARAM) lpszPassword); // Null-terminate the string. lpszPassword[cchPassword] = 0; TRACE(">>>> cchPassword=%d ,lpszPassword=%s \n",cchPassword,lpszPassword); } TRACE("IDC_EDIT_INPUTTEXT %d,%d\n",wParam,lParam); break; } } break;
and the question is ?
I have lost more blood shaving than on the battlefield - Adolf Hitler
-
and the question is ?
I have lost more blood shaving than on the battlefield - Adolf Hitler
-
lol !!! "
**如何攔截在Edit上按下的**
" means what ?!?! ;P:omg::wtf::confused::eek: X| TOXCCT alias Nicolas C.The question was posted (and encoded) in Traditional Chinese. In English, it can be translated as "How to capture the 'Enter key' hit on an Edit Control" My suggested solution would be to use PreTransMessage() and do something like the following;
BOOL CMyDlg::PreTranslateMessage(MSG *pMsg) { int ctrlID; if (pMsg->message == WM_KEYDOWN) if (pMsg->wParam == VK_RETURN) { ctrlID = (GetFocus())->GetDlgCtrlID(); if (ctrlID == IDC_MYEDIT) // do your stuff here return true; } return CDialog::PreTranslateMessage(pMsg); }
Hope it helps