11

MFC の CEdit コントロールに含まれるテキスト文字列の最大長は? 文字 30001 の後に文字を追加しようとするとビープ音が鳴ります。これはどこかに文書化されていますか? CEdit で長いテキストを表示できますか? 別のコントロールを使用する必要がありますか?

以下で「Windows プログラマー」が言うように、ユーザーが入力するときのテキストの長さの制限は、SetWindowText を使用してプログラムでテキストを設定するときと同じではありません。プログラムでテキストを設定するための制限はどこにも言及されていません。ユーザー入力のデフォルトのテキスト長制限が間違っています。(以下の私自身の投稿を参照してください)。

pEdit->SetLimitText(0) を呼び出した後、プログラムとユーザー入力テキストの長さの両方の制限は 7FFFFFFE バイトであると推測しています。私は正しいですか?

Vista で、40000 文字を超えるテキストを CEdit に貼り付けると、応答しなくなります。以前に SetLimitText(100000) を呼び出したかどうかは関係ありません。

4

3 に答える 3

19

vista で単一行の CEdit コントロールのデフォルト サイズについて言及すると、ドキュメントが間違っていることがわかりました。

私はこのコードを実行しました:

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) 
}

ドキュメントには次のように記載されています。

EM_SETLIMITTEXT が呼び出される前に、ユーザーがエディット コントロールに入力できるテキストの量の既定の制限は 32,767 文字です。

これは明らかに間違っています。

于 2008-10-08T19:35:29.903 に答える
9

コントロールでCEdit::GetLimitText()を呼び出すと、コントロールの最大値を確認できます。これは、文字データの最大サイズをバイト単位で返します。最大サイズは、CEdit :: SetLimitText()関数を使用して変更できます。

SetLimitText()関数は、EM_SETLIMITTEXTメッセージを送信するのと同じです。そのメッセージのドキュメントには、使用できる最大サイズが記載されていますが、これらは明日までに壊れてしまう可能性のあるMSDNリンクであるため、関連情報をコピーします:)

UINTパラメーターは次のように解釈されます。

ユーザーが入力できるTCHARの最大数。ANSIテキストの場合、これはバイト数です。Unicodeテキストの場合、これは文字数です。この数には、終了ヌル文字は含まれていません。リッチエディットコントロール:このパラメーターがゼロの場合、テキストの長さは64,000文字に設定されます。

Windows NT / 2000 / XPの編集コントロール:このパラメータがゼロの場合、テキストの長さは、単一行の編集コントロールの場合は0x7FFFFFFE文字に設定され、複数行の編集コントロールの場合は–1に設定されます。

Windows 95/98 / Meの編集コントロール:このパラメーターがゼロの場合、テキストの長さは、単一行の編集コントロールの場合は0x7FFE文字に設定され、複数行の編集コントロールの場合は0xFFFFに設定されます。

また、備考セクションから:

EM_SETLIMITTEXTが呼び出される前は、ユーザーが編集コントロールに入力できるテキスト量のデフォルトの制限は32,767文字です。

Windows NT / 2000 / XPの編集コントロール:単一行の編集コントロールの場合、テキスト制限は0x7FFFFFFEバイトまたはwParamパラメータの値のいずれか小さい方です。複数行の編集コントロールの場合、この値は–1バイトまたはwParamパラメーターの値のいずれか小さい方です。

Windows 95/98 / Meの編集コントロール:単一行の編集コントロールの場合、テキスト制限は0x7FFEバイトまたはwParamパラメーターの値のいずれか小さい方です。複数行の編集コントロールの場合、この値は0xFFFFバイトまたはwParamパラメーターの値のいずれか小さい方です。

2番目の段落で-1ではなく0xFFFFFFFFを意味していると思います...

于 2008-10-08T04:30:17.717 に答える
2

"(表示できる文字数で)" != "文字を追加しようとしたとき".

「文字を追加しようとするとき」==「ユーザーが入力できるTCHARの最大数」プログラムで文字を追加しようとする場合を除きます。

"0x7FFFFFFE characters" != "0x7FFFFFFE bytes" ただし、引用された MSDN テキストが理解できる場合もあります。

元の質問に対する答えを知っている人は誰もいないに違いありません。しかし、「0x7FFFFFFE バイト」は、おそらく多くの制限の 1 つです。

于 2008-10-08T04:48:54.840 に答える