Проверка введенной строки в поле ввода в MFC - PullRequest
1 голос
/ 22 июля 2011

Я создал диалоговое окно входа пользователя в MFC, в котором есть два поля редактирования для имени пользователя и пароля соответственно.Мне нужно ограничить / запретить пользователю вводить «пробел» и несколько «специальных символов» в полях «Логин / Пароль».Пожалуйста, помогите мне с этим.Спасибо.

РЕДАКТИРОВАТЬ: я проверяю имя пользователя и пароль с моей базой данных SQLite.Все работает нормально.Дополнительное требование состоит в том, чтобы запретить пользователю вводить пробелы в поле редактирования.Пожалуйста, объясните на некотором простом примере.Спасибо.

Ответы [ 4 ]

4 голосов
/ 22 июля 2011

Вам необходимо создать подкласс (наследовать) элемент управления CEdit для MFC, переопределить 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 голос
/ 22 июля 2011

Проверка http://www.flounder.com/validating_edit_control.htm. Имеется объяснение плюс пример кода

РЕДАКТИРОВАТЬ
Кстати, я не уверен, что "проверка в реальном времени" для пароляполе хорошая идея.Я думаю, что «ленивая проверка» - лучшее решение здесь.

1 голос
/ 22 июля 2011

Обработка изменения редактирования редактирования в уведомлении EN_CHANGE.

0 голосов
/ 11 декабря 2015

Как и в предыдущем ответе, это работает нормально, но вы также можете переопределить CEdit значениями ASCII (в этом случае мы использовали значения 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...