如何在编辑控件上获得左键单击通知?

时间:2016-01-28 13:25:33

标签: c++ mfc editcontrol

我想跟踪单击左键单击编辑控件的事件。 我重写了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;
       }
    }

问题是,当我点击编辑控件时,所有其他控件都会被禁用(例如按钮不会响应点击等)。

如何解决此问题?或者如何在编辑框中跟踪点击通知?

1 个答案:

答案 0 :(得分:5)

你需要这个:

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
}

BTW在这里使用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
}