duilib : 限制CRichEditUI输入的字数和行数

来源:互联网 发布:软件产品类别 编辑:程序博客网 时间:2024/05/16 15:51
/// 限制CRichEditUI输入的字数和行数/// 定义/// 限制richEdit输入内容最多为3行,总共120个字符, 最后一行最多允许输入40个字符/// 将 DuiLib::CRichEditUI 的滚动条都禁了,/// 将 DuiLib::CRichEditUI 显示区域在xml中指定的比指定字体输入3行要高一些/// 防止滚动条出现,看起来向一个普通的Edit一样#define RICH_EDIT_INPUT_LINE_MAX 3/// 用来限制行数,防止一直输入字符,到了最大行的下一行#define RICH_EDIT_INPUT_CHAR_MAX_ON_LAST_LINE 20#define RICH_EDIT_INPUT_CHAR_MAX 120CRichEditUI * m_richEditNote;    ///< 备注/// 初始化m_richEditNote->EnableScrollBar(false, false);m_richEditNote->SetLimitText(RICH_EDIT_INPUT_CHAR_MAX);/// 消息处理LRESULT CMyDlg::WndMessageProc(UINT uMsg, WPARAM wParam, LPARAM lParam){    switch (uMsg)    {    case WM_KEYDOWN:        if (m_richEditNote->IsFocused())        {            if (VK_RETURN == wParam)            {                /// >= MaxLine,不允许回车                if (m_richEditNote->GetLineCount() >= RICH_EDIT_INPUT_LINE_MAX)                    return S_FALSE;            }            else if(GetAsyncKeyState(VK_CONTROL)                && ((wParam == L'C') || (wParam == L'V')))            {                /// 禁止在richEdit中拷贝粘贴                EmptyClipboard();                return S_FALSE;            }        }        break;    case WM_CHAR:        {            if (m_richEditNote->IsFocused())            {                /// > MaxLine,不允许输入字符                if (m_richEditNote->GetLineCount() > RICH_EDIT_INPUT_LINE_MAX)                    return S_FALSE;                /// 最后一行有字数限制,防止在最后一行,不断输入字符,换到下一行                if (m_richEditNote->GetLineCount() >= RICH_EDIT_INPUT_LINE_MAX)                {                    /// 检查每一行输入是否超过                    std::wstring strContentCurLine = m_richEditNote->GetLine(RICH_EDIT_INPUT_LINE_MAX - 1, RICH_EDIT_INPUT_CHAR_MAX_ON_LAST_LINE + 1);                    if (_tcslen(strContentCurLine.c_str()) > RICH_EDIT_INPUT_CHAR_MAX_ON_LAST_LINE)                        return S_FALSE;                }            }        }        break;    /// ...    default:        break;    }        return __super::WndMessageProc(uMsg, wParam, lParam);    }


最坏的情况是: 用户每一行输入一个字符或回车,然后转到非最后一行,不断的输入字符,那样就比定义的最大行数多一行。

只要界面上的richEdit背景区域多留一行的高度即可.




0 0
原创粉丝点击