由于项目需求需要对EDIT进行输入限制
需求一:只允许输入英文,数字 不能输入其它任何字符
需求二:只允许输入英文,数字,汉字(不能输入中文符号)
第一个需求很简单,只需要继承CEdit 写一个类即可代码如下:
class CLimitEdit : public CEdit
{
DECLARE_DYNAMIC(CLimitEdit)
public:
CLimitEdit();
virtual ~CLimitEdit();
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
};
#include "stdafx.h"
#include "LimitEdit.h"
IMPLEMENT_DYNAMIC(CLimitEdit, CEdit)
CLimitEdit::CLimitEdit()
{
}
CLimitEdit::~CLimitEdit()
{
}
BEGIN_MESSAGE_MAP(CLimitEdit, CEdit)
ON_WM_CHAR()
END_MESSAGE_MAP()
// CLimitEdit 消息处理程序
void CLimitEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
以上代码里最重要的函数OnChar 函数会接收输入 在这里进行输入控制
完成需求一 只需要在方法内添加如下代码即可完成控制:
//这里只能输入数字,英文满足需求一
if( !(ch>=_T('0')&&ch<=_T('9') || ch>=_T('A')&&ch<=_T('Z') || ch>=_T('a')&&ch<=_T('z')|| ch==VK_BACK))
{
return;
}
完成需求二 如下代码:
if(nChar <= '9' && nChar >= '0')//数字
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
if(nChar >=0x4E00 && nChar <= 0x9FFF)//常用字
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
if(nChar >=0x3400 && nChar <= 0x4dff)//少用字
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
if(nChar >=0x20000 && nChar <= 0x2A6DF)//少用字,历史上使用
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
if(ch>=_T('A')&&ch<=_T('Z'))
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
if(ch>=_T('a')&&ch<=_T('z'))
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
记得不要屏闭VK_BACK命令这是退格命令
代码最前在加
if(ch==VK_BACK)
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}