BOOL PreTranslateMessage(MSG* pMsg)
- 키 입력 처리를 할 수 있는 함수.
- 보통 엔터키나 ESC키를 눌렀을때 자동으로 OnOK()나 OnCancel()로 처리 되지만,
그전에 키 입력메세지를 사용자 정의로 처리하고 싶으면 이 함수를 쓰면 된다.
[-] Collapse
{
if( pMsg->message == WM_KEYDOWN) //키 다운 메세지
{
if( pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN) //ESC or Enter 키
return FALSE; //처리 부분
}
return CDialog::PreTranslateMessage(pMsg);
}
키 다운을 처리하려면 보통 위와 같은 방법으로 처리한다.
해당되는 키 값을 조건문에 넣고, 해야할 처리를 코딩 해주면 된다.
* 부모 다이얼로그에서 탭컨트롤을 이용한 자식 다이얼로그의 키입력 처리를 할때도 사용하면 된다.
부모 다이얼로그에서 탭컨트롤에 있는 자식 다이얼로그가 3개가 있다면,
해당 자식 다이얼로그에 포커스를 두고 엔터키나 ESC를 누르면, OnOk()나 OnCancel()로 메세지가 가버려서,
다이얼로그가 사라질 수가 있다. 그러면 탭 이동을 한뒤 다시 탭을 클릭해야 해당 다이얼로그가 나타나게 된다.
자, 그러면 아래와 같이 자식 다이얼로그 클래스에서 PreTranslateMessage()를 재정의 한 후
[-] Collapse
{
return FALSE; //처리 부분
//
return CDialog::PreTranslateMessage(pMsg);
}
return FALSE; 로 처리를 해주면 된다.
키 입력 메세지가 자식 다이얼로그에서 최종적으로 처리되기 이전에, PreTranslateMessage() 함수에서 처리를 할 수 있기 때문에
PreTranslateMessage()는 return TRUE; 가 되면, 더이상 메세지 처리가 되지 않고, 거기서 메세지 처리가 종결된다.
반면에 return FALSE; 가 되면, 자식 다이얼로그에서는 더이상 메세지 처리가 되지않고
부모 다이얼로그로 메세지가 넘어간다.
그러면, 부모 다이얼로그의 PreTranslateMessage() 함수나, OnOk(), OnCancel() 함수로 흐름이 이어지게 되어
부모 다이얼로그의 키 입력 처리대로 흘러간다.
부모 다이얼로그에서 탭컨트롤에 자식 다이얼로그를 붙일 경우,
이렇게 처리를 해주면, 자식 다이얼로그에서 ESC나 엔터키를 눌러도 자식 다이얼로그가 사라지거나 하는것을 방지하고, 부모 다이얼로그의 루틴대로 처리할 수 있다.
'mfc & winAPI' 카테고리의 다른 글
[강좌/메시지] WM_NOTIFY 메시지에 대해서...(ON_NOTIFY) - 1편 (0) | 2015.08.19 |
---|---|
#import msado15.dll이 소스에서 OS등에 따라 컴파일이 되지 않을 때 (0) | 2014.04.11 |
분할 윈도우 중 하나에 접근하는 방법 (0) | 2014.02.10 |
[MFC] SendMessage (0) | 2014.01.07 |
어플리케이션(MFC)에서 스레드 사용 및 주의사항 (필독!!) (0) | 2014.01.07 |