【问题标题】:CEdit control maximum length? (in characters it can display)CEdit控件最大长度? (可以显示的字符)
【发布时间】:2010-09-15 21:39:18
【问题描述】:

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

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

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

在 vista 中,将超过 40000 个字符的文本粘贴到 CEdit 中时,它会变得无响应。我之前是否调用过 SetLimitText(100000) 也没关系。

【问题讨论】:

    标签: mfc string character cedit


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      "(它可以显示的字符)" != "尝试添加字符时"。

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

      “0x7FFFFFFE 个字符”!=“0x7FFFFFFE 字节” 除了有时,引用的 MSDN 文本有时可以理解的事实。

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

      【讨论】:

        【解决方案3】:

        在 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 个字符。

        这显然是错误的。

        【讨论】:

        • 实际测试每次都胜过文档!
        猜你喜欢
        • 1970-01-01
        • 2011-10-05
        • 2014-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多