Как получить уведомление левой кнопкой мыши на элемент управления редактирования?

Я хочу отслеживать событие одиночного щелчка левой кнопкой мыши на элементе управления редактирования. Я переопределяю PretranslateMessage функция как ниже:

BOOL CMyClass::PreTranslateMessage(Msg* pMsg)
    {
       switch(pMsg->message)

       case WM_LBUTTONDOWN:
       {
          CWnd* pWnd = GetFocus();
          if (pWnd->GetDlgCtrlID == MY_EDIT_CTRL_ID)
             {
                //Do some thing
             }
          break;
       }
    }

Проблема в том, что когда я нажимаю на элемент управления редактирования, все остальные элементы управления становятся отключенными (например, кнопки не реагируют на нажатия и т. Д.)

Как я могу исправить эту проблему? Или как я могу отслеживать уведомления о кликах N в окне редактирования?

1 ответ

Решение

Ты нуждаешься в этом:

BOOL CMyClass::PreTranslateMessage(MSG* pMsg)
{
  switch(pMsg->message)
  {
    case WM_LBUTTONDOWN:
    {
      CWnd* pWnd = GetFocus();
      if (pWnd->GetDlgCtrlID() == MY_EDIT_CTRL_ID)  // << typo corrected here
      {
         //Do some thing
      }
      break;
    }
  } 

  return __super::PreTranslateMessage(pMsg);  //<< added
}

Кстати, немного неудобно использовать здесь выражение switch. Следующий код является более чистым IMO, если вы не хотите добавлять больше случаев, чем только WM_LBUTTONDOWN:

BOOL CMyClass::PreTranslateMessage(MSG* pMsg)
{
  if (pMsg->message == WM_LBUTTONDOWN)
  {
    CWnd* pWnd = GetFocus();

    if (pWnd->GetDlgCtrlID() == MY_EDIT_CTRL_ID)
    {
       //Do some thing
    }
  } 

  return __super::PreTranslateMessage(pMsg);  //<< added
}
Другие вопросы по тегам