2008-10-07 6 views
8

Wie ist die maximale Länge für die Zeichenfolge, die in einem CEdit-Steuerelement in MFC enthalten ist? Ich bekomme einen Piepton, wenn ich versuche, einen Charakter hinzuzufügen, nachdem der Charakter 30001 irgendwo dokumentiert ist? Kann ich längere Texte in einem CEdit anzeigen? Soll ich ein anderes Steuerelement verwenden?CEdit Kontrolle maximale Länge? (in Zeichen kann es angezeigt werden)

Wie "Windows-Programmierer" unten sagt, ist das Textlängenlimit nicht gleich, wenn der Benutzer schreibt, wenn wir den Text mit SetWindowText programmatisch festlegen. Das Limit für das programmatische Einstellen eines Textes wird nirgendwo erwähnt. Das Standardlimit für Textbeschränkungen für den Benutzer ist falsch. (siehe meinen eigenen Beitrag unten).

Ich rate, dass, nachdem ich pEdit-> SetLimitText (0) die Grenze für die programmatische und Benutzereingabe Textlänge ist 7FFFFFFE Bytes. Habe ich recht?

In Vista, wenn Text länger als 40000 Zeichen in ein CEdit einfügen, reagiert es nicht mehr. Es spielt keine Rolle, ob ich zuvor SetLimitText (100000) aufgerufen habe.

Antwort

13

Ich fand die Dokumentation falsch, wenn die Standardgröße für eine einzelne Zeile CEdit-Steuerelement in Vista erwähnt.

lief ich diesen 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) 
} 

In der Dokumentation:

Bevor EM_SETLIMITTEXT genannt wird, ist das Standardlimit für die Textmenge eines Benutzer in einem Eingabefeld eingeben kann 32.767 Zeichen.

was anscheinend falsch ist.

+4

Das tatsächliche Testen schlägt die Dokumentation jedes Mal! – BoltBait

5

Sie können herausfinden, was das Maximum für Ihre Steuerung ist, indem Sie CEdit::GetLimitText() auf Ihrer Steuerung aufrufen. Dies gibt die maximale Größe für Zeichendaten in Bytes zurück. Sie können die maximale Größe mit der Funktion CEdit::SetLimitText() ändern.

Die SetLimitText() - Funktion entspricht dem Senden einer EM_SETLIMITTEXT Nachricht. Die Dokumentation für diese Nachricht gibt die maximale Größe, die verwendet werden können, aber da diese MSDN-Links sind, die wahrscheinlich von morgen gebrochen werden wird, werde ich die entsprechenden Informationen kopieren :)

Der UINT Parameter wie interpretiert wird:

Die maximale Anzahl von TCHARs, die der Benutzer eingeben kann. Für ANSI-Text ist dies die Anzahl der Bytes; Für Unicode-Text, ist dies die Anzahl der Zeichen. Diese Nummer enthält nicht das terminierende Nullzeichen. Rich edit Steuerelemente: Wenn dieser Parameter 0 ist, wird die Textlänge auf 64.000 Zeichen festgelegt.

bearbeiten Steuerelemente auf Windows NT/2000/XP: Wenn dieser Parameter Null ist, wird der Text Länge 0x7FFFFFFE Zeichen gesetzt für einzeilige Edit-Steuerelemente oder -1 für mehrzeilige Edit-Steuerelemente.

bearbeiten Steuerelemente auf Windows 95/98/Me: Wenn dieser Parameter Null ist, wird der Text Länge auf 0x7FFE Zeichen für einzeilige Edit-Steuerelemente oder 0xFFFF für mehrzeilige Edit-Steuerelemente.

Auch aus dem Bereich Bemerkungen:

Bevor EM_SETLIMITTEXT genannt wird, das Standardlimit für die Textmenge eines Benutzer in einem Eingabefeld eingeben kann, sind 32.767 Zeichen.

bearbeiten Steuerelemente auf Windows NT/2000/XP: Für einzeilige Edit-Steuerelemente, die Textgrenze ist entweder 0x7FFFFFFE Bytes oder der Wert des wParam Parameter, je nachdem, was kleiner ist.Für mehrzeilige Edit-Steuerelemente ist dieser Wert entweder -1 Bytes oder der Wert des Parameters wParam , je nachdem, welcher Wert kleiner ist.

bearbeiten Steuerelemente auf Windows 95/98/Me: Für einzeilige Edit-Steuerelemente, ist der Text Grenze entweder 0x7FFE Bytes oder der Wert des wParam Parameter, je nachdem, was kleiner ist. Für mehrzeilige Edit-Steuerelemente ist dieser Wert entweder 0xFFFF Bytes oder der Wert des wParam-Parameters, je nachdem, welcher Wert kleiner ist.

Ich nehme an, sie 0xFFFFFFFF gemeint statt -1 im zweiten Absatz dort ...

2

„(in Zeichen kann es angezeigt werden)“! = „Als ein Zeichen hinzuzufügen versuchen“.

"beim Versuch, ein Zeichen hinzuzufügen" == "Die maximale Anzahl von TCHARs, die der Benutzer eingeben kann" , es sei denn, Sie meinen programmgesteuert, ein Zeichen hinzuzufügen.

"0x7FFFFFFE Zeichen"! = "0x7FFFFFFE Bytes" mit Ausnahme manchmal, eine Tatsache, die der zitierte MSDN-Text manchmal versteht.

Ich wette, niemand kennt die Antwort auf die ursprüngliche Frage. Aber "0x7FFFFFFE Bytes" ist wahrscheinlich eine von vielen Grenzen.