Mfc CEdit控制最大长度?(以可显示的字符为单位)

Mfc CEdit控制最大长度?(以可显示的字符为单位),mfc,string,character,cedit,Mfc,String,Character,Cedit,MFC中CEdit控件中包含的文本字符串的最大长度是多少?当我尝试在字符30001之后添加字符时,会收到一声蜂鸣音。这有文档记录吗?我可以在CEdit中显示较长的文本吗?我应该使用另一个控件吗 正如下面的“Windows程序员”所说,用户键入文本时的文本长度限制与我们使用SetWindowText编程设置文本时的文本长度限制不同。任何地方都没有提到以编程方式设置文本的限制。用户键入的默认文本长度限制错误。(见下面我自己的帖子) 我猜在调用pEdit->SetLimitText(0)之后,程序和用

MFC中CEdit控件中包含的文本字符串的最大长度是多少?当我尝试在字符30001之后添加字符时,会收到一声蜂鸣音。这有文档记录吗?我可以在CEdit中显示较长的文本吗?我应该使用另一个控件吗

正如下面的“Windows程序员”所说,用户键入文本时的文本长度限制与我们使用SetWindowText编程设置文本时的文本长度限制不同。任何地方都没有提到以编程方式设置文本的限制。用户键入的默认文本长度限制错误。(见下面我自己的帖子)

我猜在调用pEdit->SetLimitText(0)之后,程序和用户输入文本长度的限制都是7FFFFFFE字节。我说得对吗


在vista中,将长度超过40000个字符的文本粘贴到CEdit中时,它将变得无响应。我以前是否调用过SetLimitText(100000)并不重要。

您可以通过调用控件来了解控件的最大值。这将返回字符数据的最大大小(以字节为单位)。您可以使用该函数更改最大大小

SetLimitText()函数相当于发送消息。该消息的文档提供了可以使用的最大大小,但由于这些是MSDN链接,可能明天就会断开,因此我将复制相关信息:)

UINT参数解释为:

用户使用的TCHAR的最大数量 我可以进去。对于ANSI文本,这是 字节数;对于Unicode文本, 这是字符数。这 数字不包括 终止空字符。丰富编辑 控件:如果此参数为零, 文本长度设置为64000 人物

在Windows NT/2000/XP上编辑控件: 如果此参数为零,则文本 长度设置为0x7FFFFFFFE字符 对于单行编辑控件或–1 用于多行编辑控件

在Windows 95/98/Me上编辑控件:如果 此参数为零,即文本 对于,长度设置为0x7FFE字符 单行编辑控件或0xFFFF 用于多行编辑控件

此外,在备注部分:

在调用EM_SETLIMITTEXT之前 文本数量的默认限制 用户可以在编辑控件中输入 32767个字符

在Windows NT/2000/XP上编辑控件: 对于单行编辑控件 文本限制为0x7FFFFFFE字节 或wParam参数的值, 以较小者为准。用于多行 编辑控件,此值为–1或 字节或wParam的值 参数,以较小者为准

Windows 95/98/Me上的编辑控件:用于 单行编辑控件,文本 限制为0x7FFE字节或 wParam参数的值, 以较小者为准。用于多行 编辑控件,此值为 0xFFFF字节或 wParam参数,以值为准 小一点

我想他们的意思是0xFFFFFF,而不是第二段中的-1…

“(在它可以显示的字符中)!=“尝试添加字符时”

“尝试添加字符时”==“用户可以输入的最大TCHAR数” 除非您是指通过编程方式尝试添加字符

“0x7FFFFFFFE字符”!=“0x7FFFFFFFFE字节” 除了有时,引用的MSDN文本有时理解的事实


我敢打赌没有人知道原来问题的答案。但是“0x7FFFFFFFFE字节”可能是许多限制之一。

我发现在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) 
}
CWnd*pWnd=dlg.GetDlgItem(nItemId);
CEdit*编辑=静态(pWnd)//动态_cast不起作用
如果(编辑!=0)
{
UINT limit=edit->GetLimitText();//此CEdit对象的当前文本限制(以字节为单位)。
//返回值:30000(0x7530)
编辑->设置限制文本(0);
限制=编辑->获取限制文本();
//返回值:2147483646(0x7FFFFFFE)
}
文件规定:

在调用EM_SETLIMITTEXT之前 文本数量的默认限制 用户可以在编辑控件中输入 32767个字符


这显然是错误的。

实际测试每次都胜过文档!