Enter키를 누르면 다이얼로그창이 꺼지는 현상 발생!!
지인들의 조언 & 검색 결과...
Dialog에서 Enter 키 입력시 Dialog가 사라지는 문제를 해결하려면 PreTranslateMessage 함수를 사용해야 한다고 나와있습니다.
PreTranslateMessage( ) 란??
CWnd::PreTranslateMessage
Used by class CWinApp to translate window messages before they are dispatched to the TranslateMessage and DispatchMessage Windows functions.
virtual BOOL PreTranslateMessage(
MSG* pMsg
);
라고 한다.
그럼..어떻게 문제를 해결했는지 확인해 봅시다!
1.
> 좌측의 메인 Dialog class를 클릭하고 속성창을 보면 (우측 동그라미 표시) 재정의 라는 버튼이 있는데 이것을 클릭합니다.
2.
> PreTranslateMessage 이벤트를 찾아 해당 함수를 추가해 줍니다.
3.
> 다음과 같이 if문을 작성하고 컨트롤하고자 하는 값을 넣습니다.
본인은 KEYDOWN메시지와 VK_RETURN에 대해서 컨트롤 하였습니다.
커서(잘 안보이지만..)가 위치한 곳에 '키보드가 눌러졌을 때 실행하고 싶은 문장'을 작성하면 됩니다.
예를 들어..
if(pMsg->message == WM_KEYDOWN )
{
MessageBox("키가 눌러졌습니다.");
return TRUE;
}
이와 같이 작성하면 키보드가 눌렸을 때에 메시지박스가 뜨게 됩니다.
리턴문이 있는 맨 마지막 줄에
return CDialog::PreTranslateMessage(pMsg);
이 있는데
이것이 리턴되기 전에 if문 안에서 중간에 return false; 를 해 버리면 어떠한 메세지도 프로그램으로 전달 되지 않게 할 수 있습니다.
(이런 식으로 원하지 않는 사용자 메시지를 걸러 냅니다.)
댓글 없음:
댓글 쓰기