대화 상자 기반의 프로그램을 만들고, 에디트 컨트롤같은 텍스트 입력 컨트롤을 올려놓은 후 엔터(ENTER) 키를 누르면 대화 상자가 종료되는 현상이 발생한다. 이를 방지하기 위해서 엔터키 입력을 따로 처리해주어야 하는데, 이 경우 PreTranslateMessage() 함수를 오버로딩 해주어야 한다.

예를 들어 CTestDlg 클래스가 대화 상자를 나타내는 클래스라면 아래와 같이 코드를 추가한다.

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

		if( pMsg->wParam == VK_ESCAPE )
		{
			SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
			return TRUE;
		}
	}

	return CDialog::PreTranslateMessage(pMsg);
}

즉, 대화 상자 클래스에서 윈도우 메시지를 처리하기 전에 이미 WM_KEYDOWN 키 중에서 RETURN 키에 대해서는 아무 일도 하지 않도록 만들고, ESC 키에 대해서는 프로그램을 최소화하도록 하는 코드이다.


Posted by kkokkal
: