2012-03-23 1 views
2

모델 대화 상자가 있습니다. OnCancel 함수를 재정 의하여 ESC 버튼을 눌러 예기치 않은 종료를 중지했습니다. 그러나 이것은 새로운 문제를 야기했습니다. 닫기 (x) 버튼을 사용하여 응용 프로그램을 닫을 수 없습니다. 함수의 구현은 다음과 같습니다.MFC/Visual C++의 OnCancel 버튼 재정의

void MyDlg::OnCancel() 
{ 
} 
+1

의 OnCancel은 X 버튼을 누르거나 탈출을 눌러 호출하고 함수 내에서 알 수있는 방법은 없습니다 :

만, 키보드 메시지를 전처리에 필요한 ESC를 해제합니다. 사용자가 종료하기를 원하는지 묻는 메시지 대화 상자를 추가하거나, 이스케이프 키 트래핑을 보도록 요청할 수 있습니다. 특히 누르십시오. –

+0

또는 취소 버튼. –

답변

6

대화 상자를 닫으면 효과적으로 취소됩니다. OnCancel 핸들러에서 닫기를 비활성화 했으므로 아무 것도 일어나지 않습니다.

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

+0

나는 "typedef CDialog base_class"를 호출 한 다음 "base_class :: OnCancel();을 호출하는 것이 더 좋은 방법이라고 생각합니다. VC 관련 __super 키워드를 사용하는 대신 – Raxillan

+0

@krish 그냥 OnCancel()을 호출하면 대화 상자를 종료해야합니다. 나는. "if"문을 사용하십시오. – Raxillan