Lorsque je passe à un contrôle CEdit dans ma boîte de dialogue à l'aide de la touche de tabulation ou des touches fléchées, tout le texte du contrôle est sélectionné. Ce comportement me cause des problèmes et je préférerais que le contrôle mette simplement le curseur au début (ou à la fin) du texte et ne sélectionne rien. Existe-t-il un moyen simple de le faire (par exemple, une propriété du contrôle que je peux définir)?CEdit sélectionne tout lors de la mise au point
Répondre
Je ne pense pas qu'un tel style existe.
Mais vous pouvez ajouter gestionnaire onSetFocus avec l'assistant:
void CMyDlg::OnSetfocusEdit1()
{
CEdit* e = (CEdit*)GetDlgItem(IDC_EDIT1);
e->SetSel(0); // <-- hide selection
}
Une autre façon d'atteindre votre objectif est d'empêcher le contenu d'être sélectionné. Lors de la navigation sur les contrôles dans une boîte de dialogue, le gestionnaire de dialogue interroge les contrôles respectifs sur certaines propriétés relatives à leur comportement. Par défaut, un contrôle d'édition répond avec un indicateur DLGC_HASSETSEL
(entre autres) pour indiquer au gestionnaire de boîtes de dialogue que son contenu doit être sélectionné automatiquement. Pour contourner ce problème, vous devez sous-classer le contrôle d'édition et gérer le message WM_GETDLGCODE pour modifier les indicateurs de façon appropriée. Tout d'abord, dériver une classe de CEdit
:
class CPersistentSelectionEdit : public CEdit {
public:
DECLARE_MESSAGE_MAP()
afx_msg UINT OnGetDlgCode() {
// Return default value, removing the DLGC_HASSETSEL flag
return (CEdit::OnGetDlgCode() & ~DLGC_HASSETSEL);
}
};
BEGIN_MESSAGE_MAP(CPersistentSelectionEdit, CEdit)
ON_WM_GETDLGCODE()
END_MESSAGE_MAP()
sous-classe suivant le contrôle effectif. Il y a un certain nombre de façons de le faire. Pour garder les choses simples simplement déclarer un membre de la classe m_Edit1
de type CPersistentSelectionEdit
dans votre classe de dialogue et ajoutez une entrée appropriée dans DoDataExchange
:
// Subclass the edit control
DDX_Control(pDX, IDC_EDIT1, m_Edit1);
À ce stade, vous avez un contrôle d'édition qui ne possède pas son contenu sélectionné automatiquement lorsque navigué vers. Vous pouvez contrôler la sélection comme vous le souhaitez.
Si vous utilisez cette méthode, vous ne perdez pas la position du curseur chaque fois que vous placez le focus sur la zone de texte, donc je le préfère. – DanDan
- 1. mise au point automatique lors de la numérisation QR code
- 2. Changement d'icône lors de la mise au point et de la défocalisation du widget Tab Android
- 3. C# détecter l'application mise au point mise au point
- 4. Mise au point du champ de texte
- 5. CDateTimeCtrl - la prévention du changement « de mise au point » lors de la mise jour
- 6. Mise au point de la caméra S60
- 7. Mise au point de Windows Vista Problème
- 8. formes de mise au point
- 9. Modification de la disposition du clavier lors de la mise au point de l'application
- 10. Perdre la mise au point d'un JTextField
- 11. jQuery ScrollBar - Pas de mise au point?
- 12. Mesure de mise au point Javascript
- 13. Mise au point absolue dans la mise en page Android
- 14. Réglage de la mise au point après animation Div
- 15. WPF TextBox Mise au point
- 16. Mise au point dans ASP
- 17. Mise au point d'un service
- 18. cellule de mise au point flex datagrid
- 19. Mise au point des 403?
- 20. HTML mise en page mise au point
- 21. Mise au point incorrecte de l'affichage AWT
- 22. Mise au point de travail de quartz
- 23. style de mise au point de contrôle
- 24. Vérification constante de la mise au point de la fenêtre
- 25. Mise au point de l'avertissement de batterie
- 26. Vérification de la mise au point d'un élément DOM
- 27. Formats HTML correctement après la mise au point appliquée
- 28. Problème de mise au point wpf textbox
- 29. Réglage de la mise au point sur la vue texte
- 30. QLineEdit - événement de mise au point
Cela n'a pas vraiment fonctionné pour moi. Mon contrôle d'édition est multi-ligne et dont le contenu peut être plus grand que le contrôle (j'ai une barre de défilement verticale). Le bNoScroll doit être TRUE, et la sélection pour "no select" est -1, 0, donc mon code l'appelle "e-> SetSel (-1, 0, TRUE);". Cela maintient toute position de défilement en cours lorsque je passe d'un onglet à l'autre dans les commandes de ma boîte de dialogue, mais aussi que rien n'est sélectionné une fois que le focus revient à mon contrôle d'édition. – franji1