Mfc CEdit::SetPasswordChar在kill focus事件中不起作用

Mfc CEdit::SetPasswordChar在kill focus事件中不起作用,mfc,passwords,cedit,Mfc,Passwords,Cedit,我有一个项目有一个带有密码模式的文本框。但当它有焦点时必须显示,当它杀死他的焦点时必须隐藏角色 这是我的源代码。m_editBox是IDC_EDIT1的控制变量 void CEditBoxTestDlg::OnEnSetfocusEdit1() { //m_editBox.SetPasswordChar(0); } void CEditBoxTestDlg::OnEnKillfocusEdit1() { //m_editBox.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()并不能很清楚地工作。我对它进行了调试,并选中“进入此模块”


我怎样才能解决这个问题。谢谢。

我自己做的。我在sendmessage之后错过了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();
}

谢谢。

不确定为什么不起作用,请尝试
m_editBox.PostMessage(EM_SETPASSWORDCHAR,(WPARAM)'*',NULL)使用Spy++跟踪EM_SETPASSWORDCHAR消息的去向。这应该告诉你是谁在处理它。此外,我会尝试“发布”消息,而不是尝试“发送”消息。我使用PostMessage(…),但它也不起作用。