2017-01-10 12 views
-1

Я хочу получать уведомление, когда пользователь нажимает текстовое поле пароля. enter image description here Но когда я щелкните текстовое поле для ввода пароля, следующая функция вызывается несколько раз:Почему мои окна получают en_setfocus 12 раз

void CUserDlg::OnSetfocusPasswordEdit() 
{ 
// TODO: Add your control notification handler code here 
    cout << "focus on password text field"; 
} 

Почему это происходит? Я также попытался:

LRESULT CFakeUserDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{ 

// TODO: Add your specialized code here and/or call the base class 
switch (message) 
{ 
    case WM_COMMAND: 
    switch (LOWORD(wParam)) 
    { 
     case IDC_PASSWORD_EDIT: 
     if (HIWORD(wParam) == EN_SETFOCUS) 
     { 
      cout << ""; 

     } 
     cout << ""; 
     break; 
    } 
    . 
    . 
    . 

Это также происходит много раз, когда я нажимаю текстовое поле только один раз.

Я просто пытался шпионить ++, но он показывает, что spy ++ caputure редактирует управляющие сообщения, но EN_SETFOCUS - это не сообщение, это уведомление об управлении редактированием.

+0

Здесь не достаточно информации, чтобы ответить на ваш вопрос. Что вы пробовали, чтобы отладить его? Используете ли вы Spy ++ для проверки потока сообщений и смотрите, есть ли на самом деле несколько сообщений WM_SETFOCUS, или, может быть, у вас есть ошибка где-то еще, что заставляет код думать, что это происходит несколько раз. –

+0

Не WM_SETFOCUS – firstaccount

+0

Справа, извините. Уведомления EN_SETFOCUS, которые вы также можете проверить со Spy ++. –

ответ

-1

Я получил ответ сам. Редактирование управления продолжает отправлять EN_SETFOCUS, когда он получает фокус.