Overide the function PreTranslateMessage like this:
BOOL CDlgMain::PreTranslateMessage(MSG* pMsg) { switch(pMsg->message) { case WM_KEYDOWN: { switch(pMsg->wParam) { case VK_ESCAPE: return 0; } } default: break; } return CDialog::PreTranslateMessage(pMsg); }