如果只用 CRichEditUI.SetLimitText, 对输入的限制不是很好。
前几天做了一个richEdit输入控制.
需求 :
* 只在richEdit中输入文本, 包含英文和中文.
* 要求有最大字数限制(百十来字).
* 不允许有回车
* 允许RichEdit默认的copy, cut, paste.
* 对剩余输入字数有统计和显示.
* 字符数输入多时,不允许出现RichEdit默认的滚动条.
实现 :
在WndMessageProc::WM_CHAR和DuiLib::Notify中处理字符输入的过滤,统计,显示.
实现起来,比较简洁. 适用于字数较少的情况。
效果图:
工程下载 :
vs2010 vc++ + DuiLib-v391改版.
实现概览:
/// @fileMainDlg.h
/// @brief主窗体
#ifndef __MAIN_DLG_H__
#define __MAIN_DLG_H__
#include "XmlWnd.h"
class CMainDlg : public CXmlWnd
{
public:
CMainDlg(WCHAR * pcXmlFileName, WCHAR * pcWndClassName);
virtual ~CMainDlg();
DUI_DECLARE_MESSAGE_MAP()
virtual void InitWindow();
virtual void OnClick(TNotifyUI& msg);
virtual void Notify(TNotifyUI & msg);
virtual void OnFinalMessage(HWND hWnd);
virtual LRESULT WndMessageProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
private:
void DataInit();
void UiInit_richEdit();
std::wstring GetStringInputLeft();
int GetInputLeft();
void CheckUploadInput();
private:
DuiLib::CRichEditUI * m_pRicheditInput; ///< 输入区
DuiLib::CLabelUI * m_pLabelLeftWordInd; ///< 剩余字符指示
DuiLib::CButtonUI * m_pBtnOk;
DuiLib::CButtonUI * m_pBtnCancel;
};
#endif // #ifndef __MAIN_DLG_H__
/// @fileMainDlg.cpp
#include "stdafx.h"
#include "MainDlg.h"
#define RICH_EDIT_INPUT_CHAR_MAX 70
#defi