2009년 11월 5일 목요일

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; 를 해 버리면 어떠한 메세지도 프로그램으로 전달 되지 않게 할 수 있다.

(이런 식으로 원하지 않는 사용자 메시지를 걸러 낸다.)


댓글 없음:

댓글 쓰기