CEdit控制最大长度? (以字符显示)

时间:2008-10-07 23:40:37

标签: mfc string character cedit

MFC中CEdit控件中包含的文本字符串的最大长度是多少?在任何地方记录角色30001之后尝试添加角色时,我会发出一声嘟嘟声?我可以在CEdit中显示更长的文本吗?我应该使用另一个控件吗?

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

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

在vista中,当将超过40000个字符的文本粘贴到CEdit中时,它会变得无法响应。如果我之前调用过SetLimitText(100000)并不重要。

3 个答案:

答案 0 :(得分:15)

我在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之前,   文本数量的默认限制a   用户可以输入编辑控件   32,767个字符。

这显然是错误的。

答案 1 :(得分:6)

您可以通过在控件上调用CEdit::GetLimitText()来了解控件的最大值。这将返回字符数据的最大大小(以字节为单位)。您可以使用CEdit::SetLimitText()功能更改最大尺寸。

SetLimitText()函数等同于发送EM_SETLIMITTEXT消息。该消息的文档给出了可以使用的最大大小,但由于这些是明天可能会破坏的MSDN链接,我将复制相关信息:)

UINT参数被解释为:

  

用户的最大TCHAR数   可以进入。对于ANSI文本,这是   字节数;对于Unicode文本,   这是字符数。这个   号码不包括   终止空字符。丰富的编辑   控件:如果此参数为零,   文本长度设置为64,000   字符。

     

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

     

在Windows 95/98 / Me上编辑控件:如果   这个参数是零,文本   length设置为0x7FFE个字符   单行编辑控件或0xFFFF   用于多行编辑控件。

另外,来自备注部分:

  

在调用EM_SETLIMITTEXT之前,   文本数量的默认限制a   用户可以输入编辑控件   32,767个字符。

     

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

     

在Windows 95/98 / Me上编辑控件:For   单行编辑控件,文本   limit是0x7FFE字节或   wParam参数的值,   以较小者为准。对于多线   编辑控件,这个值也是   0xFFFF字节或值   wParam参数,以哪个为准   小。

我认为它们的意思是0xFFFFFFFF而不是第二段中的-1 ......

答案 2 :(得分:2)

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

“尝试添加字符时”==“用户可以输入的最大TCHAR数” 除非你的意思是以编程方式尝试添加角色。

“0x7FFFFFFE characters”!=“0x7FFFFFFE bytes” 除了有时,引用的MSDN文本有时理解的事实。

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