2009년 8월 12일 수요일

Dialog에서 Enter 키 처리 문제 해결하기

Dialog에서 Enter 키를 입력하여 EditBox에 입력된 정보를 Listbox로 넘겨주고자 하는데,
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; 를 해 버리면 어떠한 메세지도 프로그램으로 전달 되지 않게 할 수 있습니다.
(이런 식으로 원하지 않는 사용자 메시지를 걸러 냅니다.)




댓글 없음:

댓글 쓰기