728x90
안녕하세요!
이번 글에서는 PreTranslateMessage함수에 대해서 알아보겠습니다.
PreTranslateMessage 함수는 MFC에서 메시지 처리 과정에서 사용되는 함수로, 발생되는 메시지를 사전에 처리하고 기본 메시지 처리 방식에 전달하는 역할을 합니다.
이 함수는 주로 다이얼로그나 윈도우 클래스에서 재정의하여 사용됩니다.
아래는 PreTranslateMessage 함수의 역할과 사용법에 대한 설명입니다.
함수의 역할
- PreTranslateMessage 함수는 MFC 메시지 루프에서 메시지를 처리하기 전에 호출되는 함수입니다.
- 이 함수를 재정의하여 메시지 처리 과정에 개입할 수 있습니다.
- 특정 메시지를 감지하고 사용자 정의 처리를 수행합니다.
- 키보드 입력, 마우스 입력 등의 메시지를 사전에 처리합니다.
- 특정 조건에 따라 메시지를 건너뛰거나, 기본 메시지 처리 방식에 전달하지 않을 수 있습니다.
함수 추가
다이얼로그나 윈도우 클래스에서 PreTranslateMessage 함수를 재정의하거나 [클래스 마법사]에서 [가상함수]탭을 통해 추가할 수 있습니다.
virtual BOOL PreTranslateMessage(MSG* pMsg);
- 직접 재정의 하여 추가 시 헤더파일에 위와 같은 형태로 선언.
함수 사용법
- PreTranslateMessage 함수 내에서 원하는 메시지 처리를 구현합니다.
- 이 함수는 MSG 구조체를 파라미터로 받으며, MSG 구조체는 메시지에 대한 정보를 담고 있습니다.
BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
//메시지가 키보드 키입력 이고, 입력된 키 파라미터가 ESC 키일때
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
{
return TRUE; // 메시지를 처리하지않고 건너뜀.
}
return CDialog::PreTranslateMessage(pMsg); // 기본 메시지 처리 방식에 전달합니다.
}
- 기본적인 다이얼로그는 ESC가 입력되었을 때 다이얼로그가 종료되지만
- PreTranslateMessage함수에서 부모클래스에 파라미터를 전달하지않고 TRUE를 반환하여 함수를 빠져나왔기 때문에 ESC키입력에 대한 메시지를 건너뜁니다.
PreTranslateMessage 함수를 재정의하여 메시지 처리 과정에 개입할 수 있으므로, 특정 키 입력을 감지하여 단축키로 사용하는 등 프로그래머의 의도대로 메시지를 핸들링할 수 있으므로 응용 프로그램의 사용성을 향상시키거나 특정 동작을 제어할 수 있습니다.
감사합니다!
728x90
'[C++] > MFC 프로그래밍' 카테고리의 다른 글
[C++] MFC 프로그래밍 : OnPaint 함수 (30) | 2023.06.19 |
---|---|
[C++] MFC 프로그래밍 : ESC/Enter 종료 방지 (21) | 2023.06.19 |
[C++] MFC 프로그래밍 : 이벤트 함수 추가 (31) | 2023.06.18 |
[C++] MFC 프로그래밍 : CString 클래스 (31) | 2023.06.18 |
[C++] MFC 프로그래밍 : CRect 클래스 (30) | 2023.06.17 |