2013-12-06 6 views
0

У меня есть проект с текстовым полем с паролем. Но это должно проявляться, когда он фокусируется и скрывает персонажей, когда он убивает его внимание.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() не работает четко. Я отлаживал его, и я проверяю вход в этот модуль.

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

+0

Не знаете, почему это не работает, попробуйте 'm_editBox.PostMessage (EM_SETPASSWORDCHAR, (WPARAM) '*', NULL);' –

+0

Используйте Spy ++ для отслеживания, куда идет сообщение EM_SETPASSWORDCHAR. это должно сказать вам, кто его обрабатывает. Кроме того, я попытался бы «отправить» сообщение, а не пытаться «отправить» его. – rrirower

+0

Я сделал это с PostMessage (...), но он тоже не работает. – bTagTiger

ответ

0

Я сделал это сам. Я пропустил функцию Invalidate() после sendmessage. И я проверил 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(); 
} 

Спасибо.

 Смежные вопросы

  • Нет связанных вопросов^_^