본문 바로가기
프로그래밍/C, C++

MFC - 다이얼로그(CDialog)에서 ESC, ENTER키를 눌렀을 때 창이 종료되지 않게 하기

by 꾸션 2015. 2. 2.

MFC의 다이얼로그(Dialog)기반 프로그램을 생성하였을 경우, 에디트박스와 같은 컨트롤에서 "ESC" 혹은 "ENTER"키를 눌렀을 때 다이얼로그가 종료되는 불편함이 있습니다.

이와 같은 현상은 해당키가 눌러졌을 때 OnOK, OnCancel의 이벤트가 호출되면서 다이얼로그가 종료되기 때문입니다.

이에 대한 해결방법으로 흔히 사용되는 방법은 해당키에 대한 이벤트를 다이얼로그에 전달되기 전에 가로채서 아무런 동작도 하지 않게 합니다.

 

처리 방법은 해당 다이얼로그에서 "PreTranslateMessage" 재정의(Overriding) 아래의 소스 코드를 넣어주면 됩니다.

 

BOOL CUserDlg::PreTranslateMessage(MSG *pMsg)
{
  if (pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN))
    return TRUE;

  return CDialog::PreTranslateMessage(pMsg);
}

 

반응형

댓글