MFC笔记一:MFC EditControl实现输入过滤
程序员文章站
2023-12-31 20:34:04
...
MFC在使用EditControl控件作为字符输入时,如输入windows文件名等情况,为EditControl控件添加相应的过滤规则以应对不同的使用场景。
常见情况:1、Windows非法字符过滤;
2、仅输入数字(正数、正负数)等情况;
3、自定义过滤字符或字符串。
解决思路:
1、为EditControl控件添加变量CString型或Control型均可,EditControl实现过滤本质为对输入字符串的判断,当包含非法字符时自动删除非法字符;
2、为EditControl控件添加EN_CHANGE消息,当EditControl输入字符发生变化时即触发该消息。
3、重载该消息,添加过滤规则。
示例:
1、为控件添加Value--CString型变量m_editInfo;
2、为EditControl天剑EN_CHANGE消息
3、添加过滤规则,以windows文件名非法字符过滤为例
UpdateData(TRUE);
if (m_editInfo.Find('/')>=0 || m_editInfo.Find('\\')>=0 || m_editInfo.Find('|')>=0 ||
m_editInfo.Find(':')>=0 || m_editInfo.Find('\?')>=0 || m_editInfo.Find('\"')>=0 ||
m_editInfo.Find('*')>=0 || m_editInfo.Find('<')>=0 || m_editInfo.Find('<')>=0)
{
int tem_nEditSize = m_editInfo.GetLength();
m_editInfo = m_editInfo.Left(tem_nEditSize-1);
UpdateData(FALSE);
if (m_editInfo.GetLength()>0)
{
//设置Edit光标至末尾,否则光标会跳至段首
((CEdit*)GetDlgItem(IDC_EDIT_INPUT))->SetSel(m_editInfo.GetLength(), m_editInfo.GetLength());
}
}
2、简单的数字范围滤除可添加Edit——Value——int型变量,设置输入范围;
3、更多过滤示例,解决思路可参考Demo
http://download.csdn.net/download/kui1989tkol/10198214