검색결과 리스트
글
다이얼로그에서 키보드 메시지(이벤트) 받기
다이얼로그(CDialog)에서 키보드 이벤트(메시지)를 받고 싶은 경우 App 에서 PreTranslateMessage 함수를 다음과 같이 Override하여 키 이벤트를 대화상자에 전달해 주어야 합니다.
BOOL CWinApp::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_CHAR)
{
this->m_pMainWnd->SendMessage(WM_CHAR, pMsg->wParam, pMsg->lParam);
// return TRUE;
}
return CWinAppEx::PreTranslateMessage(pMsg);
}
주의사항 1.
만일 return TRUE를 주석처리하지 않으면 CWinAppEx::PreTranslateMessage(pMsg)가 실행되지 않기 때문에 대화상자의 컨트롤들이 정상 동작하지 않게 됩니다. 예를 들어, CEdit 컨트롤에 텍스트를 입력할 수 없게 됩니다.
주의사항 2.
WM_CHAR 메시지로는 shift, ctrl, 화살표 키 등 특수키들을 받을 수 없습니다. 특수키들도 처리하고 싶으면 다음과 같이 WM_KEYDOWN, WM_KEYUP로 처리해야 합니다.
BOOL CWinApp::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message==WM_KEYDOWN || pMsg->message==WM_KEYUP)
{
this->m_pMainWnd->SendMessage(pMsg->message, pMsg->wParam, pMsg->lParam);
}
return CWinAppEx::PreTranslateMessage(pMsg);
}
by 다크 프로그래머
'프로그래밍 > c++' 카테고리의 다른 글
다이얼로그(dialog) UI 블로킹(응답없음) 현상 해결법 - C++ MFC (11) | 2013.02.22 |
---|---|
디렉토리(directory) 접근 C++ Win32 함수 총정리 (11) | 2013.02.12 |
setlocale 사용법 (0) | 2013.01.28 |