2008-10-07 11 views
8

Quelle est la longueur maximale de la chaîne de texte contenue dans un contrôle CEdit dans MFC? Je reçois un bip en essayant d'ajouter un caractère après que le personnage 30001 soit documenté n'importe où? Puis-je afficher des textes plus longs dans un CEdit? Dois-je utiliser un autre contrôle? Comme le dit le «programmeur Windows» ci-dessous, la limite de longueur de texte n'est pas la même lorsque l'utilisateur tape comme lorsque nous définissons le texte par programmation en utilisant SetWindowText. La limite pour la programmation d'un texte n'est mentionnée nulle part. La limite de lenteur de texte par défaut pour l'utilisateur qui tape est incorrecte. (Voir mon propre message ci-dessous).CEdit contrôle la longueur maximale? (en caractères qu'il peut afficher)

Je suppose qu'après avoir appelé pEdit-> SetLimitText (0), la limite pour la longueur du texte d'entrée programmée et de l'utilisateur est de 7FFFFFFE octets. Ai-je raison? En revanche, lorsque vous collez un texte de plus de 40000 caractères dans un CEdit, il ne répond plus. Peu importe si j'ai appelé SetLimitText (100000) précédemment.

Répondre

13

Je trouve la documentation est mauvaise en mentionnant la taille par défaut pour un seul contrôle CEdit de ligne vista.

j'ai couru ce code:

CWnd* pWnd = dlg.GetDlgItem(nItemId); 
CEdit *edit = static_cast<CEdit*>(pWnd); //dynamic_cast does not work 
if(edit != 0) 
{ 
    UINT limit = edit->GetLimitText(); //The current text limit, in bytes, for this CEdit object. 
    //value returned: 30000 (0x7530) 
    edit->SetLimitText(0); 
    limit = edit->GetLimitText(); 
    //value returned: 2147483646 (0x7FFFFFFE) 
} 

les états de documentation:

Avant EM_SETLIMITTEXT est appelé, la limite par défaut pour la quantité de texte un utilisateur peut entrer dans un contrôle d'édition est 32 767 caractères.

qui est apparemment faux.

+4

tests réels bat la documentation à chaque fois! – BoltBait

5

Vous pouvez trouver ce que le maximum est pour votre contrôle en appelant CEdit::GetLimitText() sur votre contrôle. Cela renvoie la taille maximale des données de caractères en octets. Vous pouvez modifier la taille maximale à l'aide de la fonction CEdit::SetLimitText().

La fonction SetLimitText() équivaut à l'envoi d'un message EM_SETLIMITTEXT. La documentation de ce message donne les tailles maximales qui peuvent être utilisées, mais puisque ceux-ci sont des liens MSDN qui seront probablement cassés demain, je vais copier les informations pertinentes :)

Le paramètre UINT est interprété comme:

Le nombre maximal de TCHAR que l'utilisateur peut entrer. Pour le texte ANSI, il s'agit du nombre d'octets ; pour le texte Unicode, c'est le nombre de caractères. Ce numéro n'inclut pas le caractère nul . Rich edit controls: Si ce paramètre est zéro, la longueur du texte est définie sur 64 000 caractères.

contrôles Modifier sur Windows NT/2000/XP: Si ce paramètre est égal à zéro, le texte longueur est définie sur les caractères 0x7FFFFFFE pour les contrôles d'édition unique en ligne ou -1 pour les contrôles de saisie multilignes.

contrôles Modifier sur Windows 95/98/Me: Si ce paramètre est égal à zéro, le texte longueur est définie sur les caractères 0x7FFE pour contrôles d'édition unique ligne ou 0xFFFF pour les contrôles d'édition multilignes.

En outre, à partir de la section Remarques:

Avant EM_SETLIMITTEXT est appelée, la limite par défaut pour la quantité de texte un utilisateur peut entrer dans un contrôle d'édition est 32767 caractères.

contrôles Modifier sur Windows NT/2000/XP: Pour les contrôles d'édition une seule ligne, la limite de texte est soit 0x7FFFFFFE octets ou la valeur du paramètre wParam, la plus petite valeur.Pour multilignes contrôles d'édition, cette valeur est soit -1 octets ou la valeur du paramètre wParam , selon le plus petit.

contrôles Modifier sur Windows 95/98/Me: Pour contrôles d'édition unique ligne, le texte limite est soit octets 0x7FFE ou la valeur du paramètre wParam, la plus petite valeur. Pour multilignes contrôles d'édition, cette valeur est soit octets 0xFFFF ou la valeur du paramètre wParam , selon le plus petit.

Je suppose qu'ils voulaient dire 0xFFFFFFFF au lieu de -1 dans le deuxième alinéa, ...

2

« (en caractères peut afficher) »! = « Lorsque vous essayez d'ajouter un caractère ». "Lorsque vous essayez d'ajouter un caractère" == "Le nombre maximal de TCHARs que l'utilisateur peut entrer" sauf si vous voulez dire par programme d'essayer d'ajouter un caractère. "0x7FFFFFFE caractères"! = "0x7FFFFFFE bytes" sauf parfois, un fait que le texte MSDN cité comprend parfois.

Je parie que personne ne connaît la réponse à la question initiale. Mais "0x7FFFFFFE octets" est probablement l'une des nombreuses limites.

Questions connexes