欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;

MFC笔记一:MFC EditControl实现输入过滤


MFC笔记一:MFC EditControl实现输入过滤

             2、为EditControl天剑EN_CHANGE消息

MFC笔记一:MFC EditControl实现输入过滤

            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());
 			}
		}



备注:1、实现数字输入时可通过CString->int/float等进行转换;

             2、简单的数字范围滤除可添加Edit——Value——int型变量,设置输入范围;

             3、更多过滤示例,解决思路可参考Demo

http://download.csdn.net/download/kui1989tkol/10198214






上一篇:

下一篇: