usar una teclas teclado tecla salir presione para especiales direccion con como codigo c++ windows mfc cedit

c++ - una - ¿Cómo puedo manejar la tecla Retorno en un control CEdit?



teclado en c (4)

La respuesta correcta es manejar el mensaje WM_GETDLGCODE / OnGetDlgCode . Allí puede especificar que desea que su clase maneje todas las claves.

UINT CMyEdit::OnGetDlgCode() { return CEdit::OnGetDlgCode() | DLGC_WANTALLKEYS; }

¿Cómo puedo manejar la tecla Retorno ( VK_RETURN ) en un control CEdit ? El control CEdit está emparentado con un CDialog .


Asegúrese de que el estilo de edición de control ES_WANTRETURN esté configurado en el recurso de diálogo para el control


También puede filtrar la clave en PreTranslateMessage de su diálogo. Si obtiene WM_KEYDOWN para VK_RETURN , llame a GetFocus . Si el foco está en su control de edición, llame a su manejo para la devolución presionada en el control de edición.

Tenga en cuenta que el orden de las cláusulas en el if depende de un cortocircuito para ser eficiente.

BOOL CMyDialog::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN && GetFocus() == m_EditControl) { // handle return pressed in edit control return TRUE; // this doesn''t need processing anymore } return FALSE; // all other cases still need default processing }


De forma predeterminada, la tecla Volver cierra un cuadro de diálogo MFC. Esto es así porque la tecla Retorno hace que se CDialog la CDialog OnOK() . Puede anular esa función para interceptar la tecla Retorno . Obtuve la idea básica de este artículo (ver el Método 3 al final).

Primero, asegúrese de haber agregado un miembro para el control de edición a su cuadro de diálogo usando el Asistente de clase , por ejemplo:

CEdit m_editFind;

A continuación, puede agregar el siguiente prototipo de función al archivo de encabezado de su cuadro de diálogo:

protected: virtual void OnOK();

Luego puede agregar la siguiente implementación al archivo cpp de su cuadro de diálogo:

void CMyDialog::OnOK() { if(GetFocus() == &m_editFind) { // TODO: Add your handling of the Return key here. TRACE0("Return key in edit control pressed/n"); // Call `return` to leave the dialog open. return; } // Default behavior: Close the dialog. CDialog::OnOK(); }

Tenga en cuenta: si tiene un botón Aceptar en su cuadro de diálogo que tiene el ID IDOK , también llamará a OnOK() . Si esto le causa algún problema, debe redirigir el botón a otra función de controlador. Cómo hacer esto también se describe en el Método 3 del artículo que he mencionado anteriormente.