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);
}
반응형
댓글