在MFC/Visual C++中覆盖OnCancel按钮

Ris*_*han 2 c++ mfc visual-c++

我有一个模型对话框.我通过按ESC按钮覆盖OnCancel功能以停止意外退出.但这引起了一个新问题.我无法使用close(x)按钮关闭应用程序.我的功能实现是:

void MyDlg::OnCancel()
{
}
Run Code Online (Sandbox Code Playgroud)

Gaz*_*yer 6

关闭对话框会有效取消它.由于您在OnCancel处理程序中禁用了close,因此不会发生任何事情.

要仅禁用ESC,您需要预处理键盘消息:

BOOL CYourDlg::PreTranslateMessage(MSG* pMsg)
{
   switch ( pMsg->message )
   {
       case WM_KEYDOWN:

           switch( pMsg->wParam )
           {
               case VK_ESCAPE:
               case VK_CANCEL: return true;
           }
           break;
   }

   return CDialog::PreTranslateMessage(pMsg);
}
Run Code Online (Sandbox Code Playgroud)