验证在MFC中的编辑框中输入的字符串

时间:2011-07-22 06:13:12

标签: visual-c++ mfc

我在MFC中创建了一个用户登录对话框,它有两个编辑字段,用于用户名和用户名。密码分别。我需要限制/禁止用户输入“space”&登录/密码编辑框字段中的一些“特殊字符”。请帮我解决一下这个。谢谢。

编辑:我正在验证用户名&我的SQLite数据库的密码。一切都很好。附加要求是限制用户在编辑字段中键入空格。 请用一些简单的例子来解释。谢谢。

4 个答案:

答案 0 :(得分:4)

你需要子类化(继承)MFC的CEdit控件并覆盖PreTranslateMessage并处理WM_CHAR消息并过滤那里的字符

BOOL CMyEditBox::PreTranslateMessage(MSG* pMsg)
{
    int  nTextLength = this->GetWindowTextLength();
    if(pMsg->message==WM_CHAR)
    {
       // Ignoring 0 to 9
       if( ( pMsg->wParam >= '0' &&   pMsg->wParam <= '9' ) )
       {
            return true;
       }
    }
    return CEdit::PreTranslateMessage(pMsg);
}

答案 1 :(得分:1)

处理EN_CHANGE通知消息中的编辑控件更改。

答案 2 :(得分:1)

检查http://www.flounder.com/validating_edit_control.htm。 它有一个解释加上示例代码

修改
顺便说一句,我不确定密码字段的“实时验证”是个好主意。我认为“懒惰验证”是一个更好的解决方案。

答案 3 :(得分:0)

根据上面的答案,这可以正常工作,但您也可以使用ASCII值覆盖CEdit(在这种情况下,我们使用HEX值后跟'\ x')

BOOL TestDlg::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->message==WM_CHAR)
    {
       if( ( pMsg->wParam >= '\x20'  &&   pMsg->wParam <= '\x2D'))
       {
            return true;
       }
    }
    return CEdit::PreTranslateMessage(pMsg);
}