【问题标题】:CEdit::SetPasswordChar does not work in kill focus eventCEdit::SetPasswordChar 在终止焦点事件中不起作用
【发布时间】:2013-12-08 03:25:39
【问题描述】:

我有一个项目有一个带密码模式的文本框。但这必须在它有焦点时显示,当它杀死他的焦点时隐藏角色。

这是我的源代码。 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() 不能清楚地工作。我调试了它并检查了进入这个模块。

我该如何解决这个问题。谢谢。

【问题讨论】:

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

标签: mfc passwords cedit


【解决方案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();
}

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多