Handling Enter and Escape from Modal Dialogs
Windows only


The problem is simple: how to stop my MFC modal dialog box from closing when the user presses the Enter or Escape keys?


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 );