CEdit::SetPasswordChar не работает в событии уничтожения фокуса

У меня в проекте есть текстовое поле с режимом пароля. Но это нужно показать, когда у него есть фокус, и скрыть персонажей, когда это убивает его фокус.

Это мой исходный код. m_editBox является управляющей переменной IDC_EDIT1.

void CEditBoxTestDlg::OnEnSetfocusEdit1()
{
    //m_editBox.SetPasswordChar(0);
}

void CEditBoxTestDlg::OnEnKillfocusEdit1()
{
    //m_editBox.SetPasswordChar('*');            //1
    m_editBox.SendNotifyMessage(EM_SETPASSWORDCHAR, (WPARAM) '*', NULL);    //2
}

Но OnEnKillfocusEdit() не работает четко. Я его отладил и проверяю вход в этот модуль.

Как я могу решить эту проблему. Благодарю.

1 ответ

Я сам это сделал. Я пропустил функцию Invalidate() после отправки сообщения. И я проверил SetpasswordChar(), SendNotifyMessage, PostMessage() также работают нормально.

Вот мой код:

void CEditBoxTestDlg::OnEnSetfocusEdit1()
{
    m_editBox.SetPasswordChar(0);
    m_editBox.Invalidate();
}

void CEditBoxTestDlg::OnEnKillfocusEdit1()
{
    //This 3 types also works fine
    //m_editBox.SetPasswordChar('*');
    //m_editBox.SendNotifyMessage(EM_SETPASSWORDCHAR, (WPARAM) '*', NULL);
    m_editBox.PostMessage(EM_SETPASSWORDCHAR, (WPARAM) '*', NULL);

m_editBox.Invalidate();
}

Благодарю.

Другие вопросы по тегам