Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le système traite automatiquement toutes les opérations de texte initiées par l’utilisateur et avertit l’application lorsque les opérations sont terminées.
Les rubriques suivantes traitent des opérations de texte initiées par l’utilisateur et de la réponse de l’application :
- sélection d’un de contrôle d’édition
- paramètre et récupération de texte
- sélection d' de texte
- remplacer le de texte
- modification de la police utilisée par un contrôle d’édition
- couper le collage de copie et effacer les opérations
- modification du de texte
- limitation du texte entré par l’utilisateur
- opérations de caractère et de ligne
- le défilement du texte dans un de contrôle d’édition
- définition des taquets de tabulation et des marges
- masquer les d’entrée utilisateur
- utilisation d’entiers
- annuler les opérations de texte
- gestion des sauts de ligne et wordwrap
- récupération de points et de caractères
- lacomplétion automatique des chaînes
- script complexe dans les contrôles d’édition
Sélection d’un contrôle d’édition
L’utilisateur peut sélectionner un contrôle d’édition en cliquant dessus avec la souris ou en appuyant sur tabulation pour le déplacer. La méthode de tabulation fait partie d’une interface clavier prédéfinie que le système fournit. Pour obtenir une description complète de cette interface, consultez boîtes de dialogue. Lorsque l’utilisateur sélectionne un contrôle d’édition, le système donne le contrôle au focus clavier (voir « Focus et activation du clavier » dans À propos de l’entrée du clavier) et met en surbrillance son texte à l’aide de la vidéo inversée.
Définition et récupération de texte
Une application peut définir le texte d’un contrôle d’édition à l’aide de la fonctionSetWindowText, de la fonction SetDlgItemText ou en envoyant un message WM_SETTEXT.
Pour récupérer tout le texte d’un contrôle d’édition, utilisez d’abord la fonction GetWindowTextLength ou le message WM_GETTEXTLENGTH pour déterminer la taille de la mémoire tampon nécessaire pour contenir le texte. Ensuite, récupérez le texte à l’aide de la fonction GetWindowText, de la fonction GetDlgItemText ou du message WM_GETTEXT.
Sélection du texte
Après avoir sélectionné un contrôle d’édition, l’utilisateur peut sélectionner du texte dans le contrôle à l’aide de la souris ou du clavier. Une application peut récupérer les positions des caractères de début et de fin de la sélection actuelle dans un contrôle d’édition en envoyant au contrôle un message EM_GETSEL. La valeur de retour de la position de fin est une valeur supérieure au dernier caractère de la sélection (autrement dit, la position du premier caractère suivant le dernier caractère sélectionné).
Une application peut également sélectionner du texte dans un contrôle d’édition en envoyant un message EM_SETSEL avec les index de caractères de début et de fin de la sélection. Par exemple, l’application peut utiliser EM_SETSEL avec EM_REPLACESEL pour supprimer du texte d’un contrôle d’édition.
Ces trois messages s’appliquent aux contrôles d’édition à ligne unique et multiligne.
Remplacement du texte
Une application peut remplacer le texte sélectionné dans un contrôle d’édition en envoyant un message EM_REPLACESEL par un pointeur vers le texte de remplacement. S’il n’existe aucune sélection actuelle, EM_REPLACESEL insère le texte de remplacement au point d’insertion. L’application peut recevoir un code de notification EN_ERRSPACE si le texte de remplacement dépasse la mémoire disponible. Ce message s’applique aux contrôles d’édition monoligne et multiligne.
Une application peut utiliser EM_REPLACESEL pour remplacer une partie du texte d’un contrôle d’édition ou la fonction SetDlgItemText pour la remplacer.
Modification de la police utilisée par un contrôle d’édition
Une application peut modifier la police utilisée par un contrôle d’édition en envoyant le message WM_SETFONT. La plupart des applications effectuent cette opération lors du traitement du message WM_INITDIALOG. La modification de la police ne modifie pas la taille du contrôle d’édition ; les applications qui envoient le message WM_SETFONT peuvent devoir récupérer les métriques de police pour le texte et recalculer la taille du contrôle d’édition. Pour plus d’informations sur les polices et les métriques de police, consultez Polices et texte.
Couper le collage de copie et effacer les opérations
Il existe quatre messages pour déplacer du texte entre un contrôle d’édition et le Presse-papiers. Le message WM_COPY copie la sélection actuelle (le cas échéant) d’un contrôle d’édition dans le Presse-papiers sans la supprimer du contrôle d’édition. Le message WM_CUT supprime la sélection actuelle (le cas échéant) dans le contrôle d’édition et copie le texte supprimé dans le Presse-papiers. Le message WM_CLEAR supprime la sélection actuelle (le cas échéant) d’un contrôle d’édition, mais ne le copie pas dans le Presse-papiers (sauf si l’utilisateur a appuyé sur la touche Maj). Le message WM_PASTE copie du texte du Presse-papiers dans un contrôle d’édition au point d’insertion. Ces quatre messages s’appliquent aux contrôles d’édition monoligne et multiligne.
Microsoft Windows NT 4.0 et versions ultérieures : un contrôle d’édition inclut un menu contextuel intégré qui permet à l’utilisateur de déplacer facilement du texte entre le contrôle d’édition et le Presse-papiers. Le menu contextuel s’affiche lorsque l’utilisateur clique avec le bouton droit sur le contrôle. Les commandes du menu contextuel incluent Annuler, Couper, Copier, Coller, Supprimeret Sélectionner tout.
Modification du texte
L’utilisateur peut sélectionner, supprimer ou déplacer du texte dans un contrôle d’édition. Le système conserve un indicateur interne pour chaque contrôle d’édition indiquant si le contenu du contrôle a été modifié. Le système efface cet indicateur lorsqu’il crée le contrôle et définit l’indicateur chaque fois que le texte du contrôle est modifié. Une application peut récupérer l’indicateur de modification en envoyant au contrôle un message EM_GETMODIFY. L’application peut ensuite définir ou effacer l’indicateur de modification en envoyant au contrôle un message EM_SETMODIFY. Ces messages s’appliquent aux contrôles d’édition à ligne unique et multiligne.
Limitation du texte entré par l’utilisateur
La limite par défaut du texte qu’un utilisateur peut entrer dans un contrôle d’édition est de 32 Ko. Une application peut modifier la limite par défaut en envoyant au contrôle un message EM_SETLIMITTEXT. Ce message définit une limite difficile au nombre d’octets que l’utilisateur peut entrer dans un contrôle d’édition, mais n’affecte aucun texte déjà dans le contrôle lorsque le message a été envoyé ni le texte copié dans le contrôle par la fonction SetDlgItemText ou le message WM_SETTEXT. Par exemple, supposons que l’application utilise la fonction SetDlgItemText pour placer 500 octets dans un contrôle d’édition, et que l’utilisateur entre également 500 octets (1 000 octets total). Si l’application envoie ensuite un message EM_SETLIMITTEXT limitant le texte entré par l’utilisateur à 300 octets, les 1 000 octets déjà présents dans le contrôle d’édition restent là et l’utilisateur ne peut pas ajouter de texte supplémentaire. En revanche, si l’application envoie un message EM_SETLIMITTEXT limitant le texte entré par l’utilisateur à 1 300 octets, les 1 000 octets restent, mais l’utilisateur peut ajouter 300 octets supplémentaires.
Lorsque l’utilisateur atteint la limite de caractères d’un contrôle d’édition, le système envoie à l’application un message WM_COMMAND contenant un code de notification EN_MAXTEXT. Ce code de notification ne signifie pas que la mémoire a été épuisée, mais que la limite du texte entré par l’utilisateur a été atteinte ; l’utilisateur ne peut pas entrer plus de texte. Pour modifier cette limite, une application doit envoyer au contrôle un nouveau message EM_SETLIMITTEXT avec une limite plus élevée.
Par exemple, l’utilisation de EM_SETLIMITTEXT et de EN_MAXTEXT, supposons que l’application doit limiter l’utilisateur à plus de quatre caractères dans un contrôle d’édition. L’application utilise EM_SETLIMITTEXT pour spécifier une limite à quatre caractères. Si l’utilisateur a essayé d’entrer un cinquième caractère, le système envoie un code de notification EN_MAXTEXT à l’application.
Opérations de caractère et de ligne
Il existe plusieurs messages qui retournent des informations sur les caractères et les lignes d’un contrôle d’édition. La plupart des messages retournent un index, généralement un nombre de base zéro, pour faire référence à un caractère ou à une ligne. Par exemple, dans un contrôle d’édition à une seule ligne qui contient n caractères, l’index de ligne est égal à zéro et les caractères sont indexés de zéro à n-1. Dans un contrôle d’édition multiligne qui contient m lignes et n caractères, les lignes sont indexées de zéro à m-1 et les caractères sont indexés de zéro à n-1. Notez que l’indexation de caractères ignore les sauts de ligne.
Une application peut déterminer le nombre de caractères d’un contrôle d’édition en envoyant le message WM_GETTEXTLENGTH au contrôle d’édition. Ce message retourne la longueur, en caractères (sans inclure le caractère null de fin), du texte dans un contrôle d’édition à ligne unique ou multiligne. Le message EM_LINELENGTH retourne la longueur, en caractères, d’une ligne spécifiée par l’index de caractère d’un caractère dans la ligne. La longueur retournée n’inclut aucun caractère sélectionné. Une application peut utiliser ces messages dans un contrôle d’édition monoligne ou multiligne.
Le message EM_GETFIRSTVISIBLELINE retourne l’index de base zéro de la ligne visible la plus haute dans un contrôle d’édition multiligne, ou l’index de base zéro du premier caractère visible dans un contrôle d’édition à ligne unique. Une application peut copier une ligne d’un contrôle d’édition vers une mémoire tampon en envoyant le message EM_GETLINE au contrôle d’édition. La ligne est spécifiée par son index de ligne et le premier mot de la mémoire tampon de réception contient le nombre maximal d’octets à copier dans la mémoire tampon. La valeur de retour est le nombre d’octets copiés. Ce message peut également être utilisé dans un contrôle d’édition à ligne unique ou multiligne.
Il existe des messages uniques disponibles pour renvoyer les informations relatives à une ligne dans un contrôle d’édition multiligne. Le message EM_GETLINECOUNT retourne le nombre de lignes d’un contrôle d’édition. Le message EM_LINEFROMCHAR retourne l’index de la ligne contenant un index de caractères spécifié. Le message EM_LINEINDEX retourne l’index du premier caractère dans une ligne spécifiée.
Défilement du texte dans un contrôle d’édition
Pour implémenter le défilement dans un contrôle d’édition, vous pouvez utiliser les styles de défilement automatiques abordés dans Modifier les types de contrôle et les styles, ou vous pouvez ajouter explicitement des barres de défilement au contrôle d’édition. Pour ajouter une barre de défilement horizontale, utilisez le style WS_HSCROLL ; pour ajouter une barre de défilement verticale, utilisez le style WS_VSCROLL. Un contrôle d’édition avec des barres de défilement traite ses propres messages de barre de défilement. Pour plus d’informations sur l’ajout de barres de défilement pour modifier les contrôles, consultez barres de défilement.
Le système fournit trois messages qu’une application peut envoyer à un contrôle d’édition avec des barres de défilement. Le message EM_LINESCROLL peut faire défiler un contrôle d’édition multiligne à la fois verticalement et horizontalement. Le paramètre lParam spécifie le nombre de lignes à faire défiler verticalement à partir de la ligne actuelle et le paramètre wParam spécifie le nombre de caractères à faire défiler horizontalement à partir du caractère actuel. Le contrôle d’édition ne reconnaît pas les messages de défilement horizontal s’il a le style ES_CENTER ou ES_RIGHT. Le message EM_LINESCROLL s’applique uniquement aux contrôles d’édition multiligne.
Le message EM_SCROLL fait défiler verticalement un contrôle d’édition multiligne. Le paramètre wParam spécifie l’action de défilement. Le message EM_SCROLL s’applique uniquement aux contrôles d’édition multiligne. EM_SCROLL a le même effet que le message WM_VSCROLL.
Le message EM_SCROLLCARET fait défiler le point d’affichage dans un contrôle d’édition.
Définition des taquets de tabulation et des marges
Une application peut définir des taquets de tabulation dans un contrôle d’édition multiligne à l’aide du message EM_SETTABSTOPS. (La valeur par défaut d’un taquet de tabulation est de huit caractères.) Lorsqu’une application ajoute du texte au contrôle d’édition, les caractères de tabulation du texte génèrent automatiquement de l’espace jusqu’au taquet de tabulation suivant. Le message EM_SETTABSTOPS n’entraîne pas automatiquement le redessinage du texte par le système. Pour ce faire, une application peut appeler la fonction InvalidateRect. Le message EM_SETTABSTOPS s’applique uniquement aux contrôles d’édition multiligne.
Une application peut définir la largeur des marges gauche et droite d’un contrôle d’édition à l’aide du message EM_SETMARGINS. Après avoir envoyé ce message, le système redessine le contrôle d’édition pour refléter les nouveaux paramètres de marge. Une application peut récupérer la largeur de la marge gauche ou droite en envoyant le message EM_GETMARGINS. Par défaut, les marges du contrôle d’édition sont suffisamment larges pour prendre en charge le plus grand surplomb horizontal (largeurs ABC négatives) pour la police actuelle utilisée dans le contrôle d’édition.
Masquage de l’entrée utilisateur
Une application peut utiliser un caractère de mot de passe dans un contrôle d’édition pour masquer l’entrée utilisateur. Lorsqu’un caractère de mot de passe est défini, il s’affiche à la place de chaque caractère que l’utilisateur tape. Lorsqu’un caractère de mot de passe est supprimé, le contrôle affiche les caractères que l’utilisateur tape. Si l’application crée un contrôle d’édition à ligne unique à l’aide du style ES_PASSWORD, le caractère de mot de passe par défaut est un astérisque (*). Une application peut utiliser le message EM_SETPASSWORDCHAR pour supprimer ou définir un autre caractère de mot de passe et le message EM_GETPASSWORDCHAR pour récupérer le caractère de mot de passe actuel. Ces messages s’appliquent uniquement aux contrôles d’édition à ligne unique.
Utilisation d’entiers
Il existe deux fonctions de conversion entière pour les contrôles d’édition conçus pour contenir uniquement des nombres. La fonction SetDlgItemInt crée la représentation sous forme de chaîne d’un entier spécifié (signé ou non signé) et envoie la chaîne à un contrôle d’édition. SetDlgItemInt ne retourne aucune valeur. La fonction GetDlgItemInt crée un entier (signé ou non signé) à partir de sa représentation sous forme de chaîne dans un contrôle d’édition. GetDlgItemInt retourne l’entier (ou une valeur d’erreur).
Annuler des opérations de texte
Chaque contrôle d’édition conserve un indicateur d’annulation qui indique si une application peut annuler ou annuler l’opération la plus récente sur le contrôle d’édition (annulation d’une suppression de texte, par exemple). Le contrôle d’édition définit l’indicateur d’annulation pour indiquer que l’opération peut être annulée et la réinitialise pour indiquer que l’opération ne peut pas être annulée. Une application peut déterminer le paramètre de l’indicateur d’annulation en envoyant au contrôle un message EM_CANUNDO.
Une application peut annuler l’opération la plus récente en envoyant au contrôle un message EM_UNDO. Une opération peut être annulée à condition qu’aucune autre opération de contrôle d’édition ne se produise en premier. Par exemple, l’utilisateur peut supprimer du texte, remplacer le texte (annuler la suppression), puis supprimer à nouveau le texte (annuler le remplacement). Le message EM_UNDO s’applique aux contrôles d’édition monoligne et multiligne et fonctionne toujours pour les contrôles d’édition à ligne unique.
Une application peut réinitialiser l’indicateur d’annulation d’un contrôle en envoyant le contrôle à un message EM_EMPTYUNDOBUFFER. Le système réinitialise automatiquement l’indicateur d’annulation chaque fois qu’un contrôle d’édition reçoit un message EM_SETHANDLE ou WM_SETTEXT. La fonction SetDlgItemText envoie un message WM_SETTEXT.
Gestion des sauts de ligne et wordwrap
Une application peut utiliser des fonctions Wordwrap avec des contrôles de modification multiligne pour localiser le mot ou le fragment de mots qui doit être encapsulé à la ligne suivante. À l’aide de la fonction Wordwrap par défaut fournie par le système, les lignes se terminent toujours aux espaces entre les mots. Une application peut spécifier sa propre fonction Wordwrap en fournissant une EditWordBreakProc fonction Wordwrap et en envoyant le contrôle d’édition à un message EM_SETWORDBREAKPROC. Une application peut récupérer l’adresse de la fonction Wordwrap actuelle en envoyant le contrôle à un message EM_GETWORDBREAKPROC.
Une application peut diriger un contrôle d’édition multiligne pour ajouter ou supprimer un caractère de saut de ligne souple (deux retours chariots et un flux de ligne) automatiquement à la fin des lignes de texte encapsulées. Une application peut activer ou désactiver cette fonctionnalité en envoyant au contrôle d’édition un message EM_FMTLINES. Ce message s’applique uniquement aux contrôles d’édition multiligne et n’affecte pas une ligne qui se termine par un saut de ligne dur (un retour chariot et un flux de ligne entré par l’utilisateur). En outre, dans les contrôles d’édition multiligne, une application peut spécifier le style ES_WANTRETURN pour demander au système d’insérer un retour chariot lorsque l’utilisateur appuie sur la touche Entrée dans le contrôle d’édition.
Récupération de points et de caractères
Pour déterminer le caractère le plus proche d’un point spécifié dans la zone cliente d’un contrôle d’édition, envoyez le message EM_CHARFROMPOS au contrôle. Le message retourne l’index de caractère et l’index de ligne du caractère le plus proche du point. De même, vous pouvez récupérer les coordonnées de zone cliente d’un caractère spécifié en envoyant le message EM_POSFROMCHAR. Le message retourne les coordonnées x et y du coin supérieur gauche du caractère spécifié.
Autocomplétion des chaînes
La saisie automatique développe les chaînes qui ont été partiellement entrées dans un contrôle d’édition dans des chaînes complètes. Par exemple, lorsqu’un utilisateur commence à entrer une URL dans le contrôle De modification d’adresse incorporée dans la barre d’outils Windows Internet Explorer, la saisie automatique développe la chaîne en une ou plusieurs URL complètes qui sont cohérentes avec la chaîne partielle existante. Une chaîne d’URL partielle telle que « mic » peut être développée sur «https://www.microsoft.com" ou "https://www.microsoft.com/windows". La saisie automatique est généralement utilisée avec des contrôles d’édition ou avec des contrôles qui ont un contrôle d’édition incorporé.
Pour plus d’informations, consultez la documentation de l’interfaceIAutoCompleteet IAutoComplete2.
Script complexe dans les contrôles d’édition
Un script complexe est une langue dont la forme imprimée n’est pas disposée d’une manière simple. Par exemple, un script complexe peut autoriser le rendu bidirectionnel, la mise en forme contextuelle des glyphes ou la combinaison de caractères. Les contrôles d’édition standard ont été étendus pour prendre en charge le texte multilingue et les scripts complexes. Cela inclut non seulement l’entrée et l’affichage, mais également le déplacement correct du curseur sur les clusters de caractères (dans le script Thaï et Devanagari, par exemple).
Une application bien écrite reçoit cette prise en charge automatiquement, sans modification. Là encore, vous devez envisager d’ajouter la prise en charge de l’ordre de lecture de droite à gauche et de l’alignement droit. Dans ce cas, basculez les indicateurs de style étendus de la fenêtre de contrôle d’édition pour contrôler ces attributs, comme illustré dans l’exemple suivant.
// ID_EDITCONTROL is the control ID in the resource file.
HANDLE hWndEdit = GetDlgItem(hDlg, ID_EDITCONTROL);
LONG lAlign = GetWindowLong(hWndEdit, GWL_EXSTYLE) ;
// To toggle alignment
lAlign ^= WS_EX_RIGHT ;
// To toggle reading order
lAlign ^= WS_EX_RTLREADING ;
Après avoir défini la valeur lAlign, activez le nouvel affichage en définissant le style étendu de la fenêtre de contrôle d’édition comme suit.
// This assumes your edit control is in a dialog box. If not,
// get the edit control handle from another source.
SetWindowLong(hWndEdit, GWL_EXSTYLE, lAlign);
InvalidateRect(hWndEdit, NULL, FALSE);
Uniscribe est un autre ensemble de fonctions qui fournissent un contrôle précis pour le traitement de scripts complexes. Pour plus d’informations, consultez uniscribe .