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();
}
Благодарю.