2016-01-28 6 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; 
     } 
    } 

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

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

+1

Где ваше возвращение __super :: PreTranslateMessage (PMSG); ? См. здесь: http://binglongx.com/2011/03/20/pretranslatemessage-overrides-in-mfc-and-grab-key-presses/ –

+0

Я возвращаю TRUE в if() тело после // Делаю что-то – 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 использовать переключатель заявление здесь. Следующий код чище 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

Дорогой Михаил К сожалению, он не работает – javad

+0

@javad, если он по-прежнему не работает, вам нужно будет добавить больше своего кода. Попробуйте создать минимальное, но полное приложение. –

+0

Я считаю, что это должно сработать. Я делал это много раз в прошлом (давно, но с тех пор, как я больше не пишу код MFC). Возможно, все, что вы делаете в '// Do some thing', является проблемой. – drescherjm

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