我在MFC中创建了一个用户登录对话框,它有两个编辑字段,用于用户名和用户名。密码分别。我需要限制/禁止用户输入“space”&登录/密码编辑框字段中的一些“特殊字符”。请帮我解决一下这个。谢谢。
编辑:我正在验证用户名&我的SQLite数据库的密码。一切都很好。附加要求是限制用户在编辑字段中键入空格。 请用一些简单的例子来解释。谢谢。答案 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);
}