¿Cómo puedo manejar la devolución clave (VK_RETURN
) en un control CEdit
? El control CEdit
está emparentado con un CDialog
.¿Cómo puedo manejar la tecla Retorno en un control CEdit?
Respuesta
asegurarse de que el estilo ES_WANTRETURN control de edición se encuentra en el recurso de diálogo para el control
También puede filtrar la llave en PreTranslateMessage de su diálogo. Si obtiene WM_KEYDOWN
para VK_RETURN
, llame al 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 si se basa en un cortocircuito es 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
}
La respuesta correcta es la de 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;
}
Por defecto, la tecla de retorno cierra un diálogo MFC. Esto se debe a que la tecla Devolver hace que se llame a la función CDialog
OnOK()
. Puede anular esa función para interceptar la clave Devolver. Obtuve la idea básica de this article (ver Método 3 al final).
En primer lugar, asegúrese de que ha agregado un miembro para el control de edición a su diálogo con el Class Wizard, por ejemplo:
CEdit m_editFind;
A continuación, se puede añadir el siguiente prototipo de función en el archivo de encabezado de su diálogo:
protected:
virtual void OnOK();
a continuación, se puede añadir lo siguiente a la aplicación CPP archivo de su 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 usted tiene un botón de OK en su cuadro de diálogo que tiene el ID de IDOK
, entonces también llamará 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 Método 3 de the article que he mencionado anteriormente.
- 1. ¿Cómo puedo manejar la tecla ESC en la aplicación Cocoa?
- 2. cómo agregar una acción en la tecla de retorno UITextField?
- 3. CEdit selecciona todo al obtener el foco
- 4. Problema de dibujo de CSpinButtonCtrl con el pequeño control CEdit
- 5. ¿Cómo puedo activar o desactivar manualmente la tecla Retorno en el teclado?
- 6. ¿Cómo cambiar la "FUENTE" para CEdit?
- 7. Tecla de control más rueda del mouse
- 8. Manejar la tecla Enter en EditText en diferentes dispositivos
- 9. SetLimitText() en un CEdit en Vista no funciona
- 10. ¿Cómo ocultar el teclado cuando presiono la tecla de retorno en un UITextField?
- 11. Usando la plantilla para el valor de retorno. cómo manejar el retorno nulo?
- 12. ¿Cómo puedo manejar una tecla de acceso directo en cada ventana de WPF?
- 13. CEdit control MFC, colocando el cursor al final de la cadena después de SetWindowText
- 14. Texto de la tecla de retorno del iPhone personalizado
- 15. ¿Cómo puedo determinar cuándo se mantiene presionada la tecla de control durante el clic del botón
- 16. Delphi: ¿Puedo diferenciar entre la tecla Entrar del teclado numérico y el retorno del carro?
- 17. Cómo manejar la tecla ESC en la ventana emergente de Javascript
- 18. ¿Cómo puedo manejar un formulario de Windows datetimepicker ArgumentOutOfRangeException?
- 19. Cómo manejar evento de pulsación de tecla aplicación de consola
- 20. Cómo manejar la excepción de navegación de control WPF WebBrowser
- 21. Manejar al usuario presionando la tecla 'Entrar' en un sitio web ASP.NET MVC
- 22. iPhone UITextField: ¿cómo insertar una nueva línea con la tecla de retorno?
- 23. ¿Cómo puedo manejar archivos grandes en Ruby?
- 24. ¿Cómo puedo aceptar la tecla de retroceso en el evento de pulsación de tecla?
- 25. teclado del teclado numérico no muestra la tecla de retorno en el iphone
- 26. ¿Cómo puedo manejar Javascript en un rastreador web Perl?
- 27. Cómo manejar un evento ActiveX en Javascript
- 28. ¿Cómo puedo manejar eventos clave en meteoritos?
- 29. llamando retorno RedirectToAction ("Actividad") fuera de control
- 30. Android NDK: cómo manejar la tecla Atrás para presionar en Cocos2dx?
Esto no funciona. Esto no es lo que quiero. Quiero obtener la tecla RETORNO Y hacer algo. No solo permite ingresar la tecla RETORNO. – knaser
Luego necesitará subclasificar el control de edición y manejar los mensajes WM_CHAR o KeyDown que se responden en otras preguntas SO. O dentro del MessageMap del diálogo, maneje Editar Cambiar mensajes desde el control (enviado para cada personaje). – SAMills
ES_WANTRETURN es * solo * aplicable para cuadros de texto de varias líneas. –