BOOL IcUiNumericEdit::IsMatchChar(UINT nChar)
{
//首先如果不是 0-9, '.','/',Backspace,直接返回 0的ASCII 48, 9的ASCII 57, /的ASCII 47,点.的ASCII 46. backspace 8
if(nChar == '.' || (nChar >= '0' && nChar <= '9') || nChar == '/' || nChar == 8)
{
CString strRet;
GetWindowText(strRet);
int nLen = strRet.GetLength();
if(nChar == '/') //如果nChar为‘/'。 返回错误情况: 1. 作为字符串首,2. 前面为'.' 3. 前已存在‘/'时
{
if(strRet.Trim().IsEmpty())
return FALSE;
if(strRet.GetAt(nLen - 1) == '.') //最后一个为'.'
return FALSE;
if(strRet.Find('/') != -1) // -1 表示没有找到
return FALSE;
}
else if(nChar == '.') //如果nChar为 '.' 返回错误情况 1.作为字符串首 2. 前为‘.',‘/’时。 3. 存在斜线了,判断其后是否已存在'.',如果不存在判断’/‘前是否存在
{
if(strRet.Trim().IsEmpty())
return FALSE;
int nLen = strRet.GetLength();
if(strRet.GetAt(nLen - 1) == '.' || strRet.GetAt(nLen - 1) == '/')
return FALSE;
if(strRet.Find('/') == -1) // 当前没有'/'
{
if(strRet.Find('.') != -1)
return false;
}
else
{
//获取当前'/'后的字符串,如果后面字符串中存在.,则返回false
int nStart = strRet.Find('/');
CString strSub = strRet.Right(nLen - nStart - 1);
if(strSub.Find('.') != -1)
return FALSE;
}
}
return TRUE;
}
return FALSE;
}