Comment puis-je gérer la touche Return (VK_RETURN
) dans un contrôle CEdit
? Le contrôle CEdit
est parent d'un CDialog
.Comment puis-je gérer la touche Retour dans un contrôle CEdit?
Répondre
Assurez-vous que le style Edit Control ES_WANTRETURN est défini dans la ressource de dialogue pour le contrôle
Vous pouvez également filtrer la clé dans PreTranslateMessage votre boîte de dialogue. Si vous obtenez WM_KEYDOWN
pour VK_RETURN
, appelez GetFocus
. Si le focus est sur votre contrôle d'édition, appelez votre manipulation pour le retour appuyé dans le contrôle d'édition.
Veuillez noter que l'ordre des clauses dans le cas de mise en court-circuit est efficace.
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 bonne réponse est de gérer le message WM_GETDLGCODE/OnGetDlgCode. Là, vous pouvez spécifier que vous voulez que toutes les clés soient gérées par votre classe.
UINT CMyEdit::OnGetDlgCode()
{
return CEdit::OnGetDlgCode() | DLGC_WANTALLKEYS;
}
Par défaut, la touche Retour ferme une boîte de dialogue MFC. Ceci est dû au fait que la touche Return (retour) provoque l'appel de la fonction OnOK()
. Vous pouvez remplacer cette fonction afin d'intercepter la touche Return. J'ai eu l'idée de base de this article (voir Méthode 3 à la fin).
Tout d'abord, assurez-vous que vous avez ajouté un membre pour le contrôle d'édition de votre boîte de dialogue à l'aide du Class Wizard, par exemple:
CEdit m_editFind;
Ensuite, vous pouvez ajouter le prototype de fonction suivante dans le fichier d'en-tête de votre dialogue:
protected:
virtual void OnOK();
vous pouvez ajouter la mise en œuvre suivante au fichier cpp de votre boîte de dialogue:
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();
}
S'il vous plaît noter: Si vous avez un bouton OK dans votre boîte de dialogue qui a l'ID IDOK
, il appellera également OnOK()
. Si cela vous cause des problèmes, vous devez rediriger le bouton vers une autre fonction de gestionnaire. Comment faire cela est également décrit dans Méthode 3 de the article que j'ai mentionné ci-dessus.
- 1. Comment réserver la position du curseur dans le contrôle CEdit?
- 2. Multiligne NSTokenField et la touche de retour
- 3. IME - Comment gérer la touche Appuyez sur
- 4. Comment gérer CEdit clic de souris sous forme parent?
- 5. validant CEdit sans sous-classe
- 6. CEdit contrôle la longueur maximale? (en caractères qu'il peut afficher)
- 7. Comment faire défiler correctement CEdit?
- 8. Comment cacher le clavier - de - UITextView iPhone - Dans un UITextView, par la touche Retour
- 9. La touche de retour arrière de telnet est incorrecte
- 10. MFC: Modification de la couleur de CEdit
- 11. texte Changement de touche du clavier « Retour »
- 12. Activer la touche Retour de l'iPhone ne fonctionne pas?
- 13. Gérer plusieurs événements vous maintenez la touche C fenêtres # forme
- 14. Comment intercepter une touche de tabulation dans le contrôle d'édition
- 15. Est-il possible de gérer la touche haut/bas dans le champ de saisie HTML?
- 16. Comment bloquer la soumission d'un formulaire en appuyant sur la touche Entrée ou Retour?
- 17. Comment gérer correctement l'état d'affichage d'un contrôle enfant dans un contrôle composite?
- 18. Comment mapper globalement la touche AltGr à la touche Alt?
- 19. Comment désactiver la gestion des boutons JDialog par défaut de la touche ENTRÉE dans un composant
- 20. iPhone UITextField: comment insérer une nouvelle ligne avec la touche de retour?
- 21. Comment hooker la touche TAB dans un usercontrol pour que le focus ne passe pas à un contrôle différent?
- 22. Gestion des événements de touche sur le contrôle WebBrowser
- 23. Désactiver globalement la touche Entrée/Retour dans une boîte de dialogue SWT
- 24. comment gérer un long texte dans le contrôle dropdownlist dans ASP.NET
- 25. Comment puis-je gérer une touche de raccourci dans chaque fenêtre WPF?
- 26. Déclencher un événement javascript à partir d'un contrôle utilisateur ASP.NET et gérer dans la page ASP.NET
- 27. Puis-je annuler la publication lorsque l'utilisateur appuie sur la touche Retour dans une zone de texte?
- 28. Comment gérer un pool d'objets dans Spring?
- 29. Comment gérer un bogue dans VS2008
- 30. Retour contrôle ASP DDL ou Telerik
Cela ne fonctionne pas. Ce n'est pas ce que je veux. Je veux obtenir la touche RETOUR et faire quelque chose. Ne laissez pas simplement entrer la touche RETURN. – knaser
Ensuite, vous devrez sous-classer le contrôle d'édition et gérer les messages WM_CHAR ou KeyDown auxquels on répond dans d'autres questions SO. OU dans MessageMap de la boîte de dialogue, gérer Modifier les messages de modification à partir du contrôle (envoyé pour chaque caractère). – SAMills
ES_WANTRETURN est * seulement * applicable aux zones de texte multilignes. –