①首先继承CEdit类,实现CInPutEdit类,在CInPutEdit类中添加WM_CHAR消息
②在OnChar函数中添加如下代码
void CInPutEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (nChar <= '9' && nChar >= '0')//数字
CEdit::OnChar(nChar, nRepCnt, nFlags);
else if (nChar <= 'Z' && nChar >= 'A')//大写字母
CEdit::OnChar(nChar, nRepCnt, nFlags);
else if (nChar <= 'z' && nChar >= 'a')//小写字母
CEdit::OnChar(nChar, nRepCnt, nFlags);
else if (IsChineseCharANSI(nChar))//汉字
CEdit::OnChar(nChar, nRepCnt, nFlags);
return;
}
③添加IsChineseCharUnicode函数,代码如下
BOOL CInPutEdit::IsChineseCharANSI(UINT nChar)
{
BOOL bResult = FALSE;
if (nChar >= 0x4E00 && nChar <= 0x9FFF)//常用字
bResult = TRUE;
if (nChar >= 0x3400 && nChar <= 0x4dff)//少用字
bResult = TRUE;
if (nChar >= 0x20000 && nChar <= 0x2A6DF)//少用字,历史上使用
bResult = TRUE;
return bResult;
}
注意如果是多字节处理汉字可以用以下代码
BOOL IsChineseCharANSI(UINT nChar)
{
BOOL bResult = FALSE;
// 依据为国标GB2312-1980的汉字编码方式,常用字编码
if (nChar >= 0xB0 && nChar <= 0xF7)
bResult = TRUE;
else if (nChar >= 0xA1 && nChar <= 0xFE)
bResult = TRUE;
return bResult;
}