최상단 광고

2012년 4월 11일 수요일

[MFC] WM_KEYDOWN 메시지를 DIALOG에서 받기



OnKeyDown 함수는 View 클래스에서 우선권이 있다.
그럼 View 클래스가 포함되지 않은 DIALOG나 다른 클래스에 OnKeyDown가 정의된다면
View 클래스에서 정의된 것이 없기 때문에 OnKeyDown가 제대로 호출되지 않는다.

이를 해결할려면
첫째, View 클래스의 OnKeyDown 함수에서 다른 클래스에 정의된 OnKeyDown 함수를 호출한다.

둘째,
PreTranslateMessage 함수(메세지를 잡아내는)를 이용하여 WM_KEYDOWN 메시지가
발생할 때의 작업을 지정

EX) 다이얼로그가 WM_KEYDOWN 메시지를 받을때

BOOL 다이얼로그클래스명::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class/
if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_LEFT){
//왼쪽 버튼이 눌렸을경우 발생할 이벤트
}
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RIGHT){
//오른쪽 버튼이 눌렸을경우 발생할 이벤트
}
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_UP){
//위쪽 버튼이 눌렸을경우 발생할 이벤트
}
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_DOWN)
//아래 버튼이 눌렸을경우 발생할 이벤트
}
Invalidate();

return CDialog::PreTranslateMessage(pMsg);
}
P.S 마우스 이벤트도 마찬가지.

댓글 없음: