2016-01-28 47 views
2

我想跟蹤單擊左鍵單擊編輯控件的事件。 我重寫如下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

哪裏是你的回報__super ::的PreTranslateMessage(PMSG); ?見例如這裏:http://binglongx.com/2011/03/20/pretranslatemessage-overrides-in-mfc-and-grab-key-presses/ –

+0

我在if()body中返回TRUE //做點什麼 – javad

+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它有點awkword在這裏使用switch語句。下面的代碼是清潔IMO,除非你想添加morecases不僅僅是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 
} 
+0

親愛的Michael不幸的是,它不起作用 – javad

+0

@javad如果它仍然不起作用,您需要包含更多的代碼。嘗試創建一個最小但完整的應用程序 –

+0

我相信它應該工作。我在過去做了很多次(很久以前,因爲我不再編寫MFC代碼)。也許無論你在「//做一些事情」中做什麼都是問題。 – drescherjm

相關問題