<참고> https://learn.microsoft.com/ko-kr/windows/win32/learnwin32/accelerator-tables
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)
'MFC' 카테고리의 다른 글
BluetoothFindFirstDevice Example (0) | 2024.10.21 |
---|---|
CFileDialog의 Title 이름 변경하는 방법 (0) | 2024.01.16 |
최근 열어본 파일 MRU Menu Items 처리 커스텀 방법 (1) | 2024.01.15 |
UpdateData() 함수 Param 의미 (0) | 2023.07.07 |
ON_CONTROL_RANGE를 이용해서 같은 이벤트 처리를 한 함수로 해결 방법 (0) | 2023.07.05 |