Handling Enter and Escape from Modal Dialogs
Windows only
Problem
The problem is simple: how to stop my MFC modal dialog box from closing when the user presses the Enter or Escape keys?
Solution
The first step is to, on your CDialog-drived class, override the CWnd::PreTranslateMessage
virtual function. This function is used translate window messages before they are dispatched to the TranslateMessage
and DispatchMessage
Windows functions. Then, add the following block of code:
BOOL CMyModalDialog::PreTranslateMessage( MSG* pMsg ) { if( pMsg ) { if( pMsg->message == WM_KEYDOWN ) { if( pMsg->wParam == VK_RETURN | pMsg->wParam == VK_ESCAPE ) pMsg->wParam = NULL; } } // Call the base class PreTranslateMessage. In this example, // CRhinoDialog is the base class to CMyModalDialog. return CRhinoDialog::PreTranslateMessage( pMsg ); }