2012-03-23 25 views
2

我有一個模型對話框。我通過按下ESC按鈕忽略OnCancel函數來停止意外退出。但是這造成了一個新問題。我無法使用關閉(x)按鈕關閉應用程序。我實現的功能是:覆蓋MFC/Visual C++中的OnCancel按鈕

void MyDlg::OnCancel() 
{ 
} 
+1

OnCancel通過按下X按鈕或按逃避所謂的,而且也沒有辦法在函數中告訴。您可以添加一個消息對話框來詢問用戶是否確定要退出,或者專門查看陷印逃生按鍵。 – 2012-03-23 11:17:24

+0

或取消按鈕。 – 2012-03-23 11:26:23

回答

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); 
} 
+0

我實施了您的解決方案。它的工作正常......但我有另一個問題,如何按住ESC按鈕時停止退出? – Riskhan 2012-03-23 11:22:05

+0

我認爲最好的做法是用另一種方式:「typedef CDialog base_class」,然後調用「base_class :: OnCancel();」而不是使用特定於VC的__super關鍵字。 – Raxillan 2012-03-23 11:22:49

+0

@krish只需調用base OnCancel(),那麼你需要退出對話框。即使用「if」語句。 – Raxillan 2012-03-23 11:24:24