다이얼로그 베이스의 경우, ESC나 엔터 키를 누르면 프로그램이 종료되어버립니다.
엔터, ESC 등 키를 핸들링하는 법을 알아보겠습니다.
컨트롤+W를 눌러 클래스 위저드를 열고 PreTranslateMessage 메세지맵을 추가합니다.
그리고 아래와 같이 코딩합니다.
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN){
if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE){
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
그럼, 엔터키와 ESC 키를 눌렀을 때 아무런 동작도 하지 않습니다.
만일 특정한 동작을 추가하고 싶으면 return TRUE 앞에 해당 코드를 넣어주면 됩니다.
엔터와 ESC 뿐만 아니라 마우스 클릭 등 다른 메세지도 똑같은 방법으로 처리할 수 있습니다.
WM_LBUTTONDOWN, WM_RBUTTONDOWN 등이죠.
메세지 종류에 대한 자세한 내용은 MSDN 참조하시면 되겠습니다.
좀 더 응용할 수도 있습니다.
예를 들어 에디트박스에 포커스가 가 있을 때 엔터를 누르면 특정동작을 하고 싶다면,
if(pMsg->message == WM_KEYDOWN && pMsg->hwnd == m_Edit1.m_hWnd){
엔터, ESC 등 키를 핸들링하는 법을 알아보겠습니다.
컨트롤+W를 눌러 클래스 위저드를 열고 PreTranslateMessage 메세지맵을 추가합니다.
그리고 아래와 같이 코딩합니다.
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN){
if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE){
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
그럼, 엔터키와 ESC 키를 눌렀을 때 아무런 동작도 하지 않습니다.
만일 특정한 동작을 추가하고 싶으면 return TRUE 앞에 해당 코드를 넣어주면 됩니다.
엔터와 ESC 뿐만 아니라 마우스 클릭 등 다른 메세지도 똑같은 방법으로 처리할 수 있습니다.
WM_LBUTTONDOWN, WM_RBUTTONDOWN 등이죠.
메세지 종류에 대한 자세한 내용은 MSDN 참조하시면 되겠습니다.
좀 더 응용할 수도 있습니다.
예를 들어 에디트박스에 포커스가 가 있을 때 엔터를 누르면 특정동작을 하고 싶다면,
if(pMsg->message == WM_KEYDOWN && pMsg->hwnd == m_Edit1.m_hWnd){
//여기에 원하는 동작을 넣으세요.
return TRUE;
return TRUE;
}
이렇게 수정하면 됩니다.
이렇게 수정하면 됩니다.