MFC에서 단축키 수정후에 적용되지 않는 문제

MFC에서 단축키 수정후에 적용되지 않는 문제

(MFC Feature Pack accelerator issue)

MFC를 사용하는 어플리케이션을 개발하는 중에 수정한 단축키가 적용이 안되는 버그를 발견.
구글링으로 “MFC Feature Pack accelerator issue” 라고 이미 알려진 버그였음.
( MS VC++ 라이브러리 개발팀에선 설계상의 제한사항이며 버그가 아니라하네요.
http://connect.microsoft.com/VisualStudio/feedback/details/540924/mfc-feature-pack-accelerator-issue )

프로그램이 종료될때 MFC에서 단축키정보를 레지스트리에 저장하고, 프로그램이 시작될때 레지스트리에서 읽기때문에, 레지스트리에 이미 저장된 단축키가 있으면, 단축키를 수정해도 적용안됨(그럼 accelerator는 왜 만든거지... ㅠㅠ)

해결방법은

  1. 사용자가 직접 레지스트에 저장된 내용을 지운다.
    레지스트리 경로: HKEY_CURRENT_USER\Software\???\???\Workspace\Keyboard-0
    단점: 전문지식이 없는 사용자에게 레지스트를 직접건드리게 하는 것은 좋은 방법이 아니고,이미 프로그램이 배포된 상황에서는 비현실적인 해결책이다.
  2. 프로그램이 시작될때 레지스트리에서 읽은 단축키 정보를 초기화한다.
    CWinAppEx의 LoadCustomState를 오버라이드하고 키보드 메니져를 리셋하는 방법.(이 또한 좋지만은 않아보이지만.. 그래도 어쩌겠어.. 이렇게 라고 리셋해줘야지.. -_-)

1
2
3
4
5
6
7
virtual void LoadCustomState() override
{
    __super::LoadCustomState();
 
    // 레지스트리에서 로드한 저장된 단축키를 지우고, 리소스의 것을 사용하도록 한다.
    GetKeyboardManager()->ResetAll();
}


이 글을 공유하기

댓글

Designed by JB FACTORY