본문 바로가기
MFC

MFC 단축키 Accelerator 리소스 추가

by leo21c 2024. 1. 16.
SMALL

<참고> https://learn.microsoft.com/ko-kr/windows/win32/learnwin32/accelerator-tables

 

액셀러레이터 키 테이블 - Win32 apps

액셀러레이터 키 테이블

learn.microsoft.com

MFC 프로젝트에 Accelerator 리소스를 아래 이름으로 추가합니다.

IDR_ACCEL1

리소스 편집기에서 관련 단축키를 지정합니다.

 

ID_FILE_OPEN, ID_FILE_SAVE 등은 기본적으로 생성이 되는데 Main Menu, Toolbar에 관련 ID가 등록되어 있으면 아래와 같이 Accelerator를 등록하지 않아도 작동이 되는 것 같습니다.

 

그러나 사용자가 추가한 ID는 아래와 같이 등록을 하지 않으면 작동이 되지 않는 것을 확인 했습니다.

 

헤더에 변수와 가상 함수 추가

HACCEL hAccel;

virtual BOOL PreTranslateMessage(MSG* pMsg);

 

TestApp의 InitInstance() 함수에서 Load를 합니다.

 

m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE( IDR_ACCEL1 ));

 

가상함수를 아래와 같이 처리합니다.


BOOL TestApp::PreTranslateMessage(MSG* pMsg)
{
	// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.

	if (AfxGetMainWnd()->GetSafeHwnd())
		if (::TranslateAccelerator(AfxGetMainWnd()->m_hWnd, m_hAccel, pMsg)) return TRUE;

	return CWinApp::PreTranslateMessage(pMsg);
}

 


위와 같이 Accelerator 처리를 할수 있도록 처리합니다.

 

이렇게 하면 사용자가 추가한 Accelerator가 정상적으로 작동이 되는 것을 확인할 수 있습니다.

당연히 Accelerator에 추가한 단축키 ID에 대한 Event 함수는 따로 등록을 해야 합니다.

 

아래는 ID_FILE_UER_OPEN 단축키를 만들어서 처리하는 것을 의미합니다.

ON_COMMAND(ID_FILE_UER_OPEN, &TestApp::OnFileOpenTestFile)

 

 

 

LIST