MFC를 사용하는 어플리케이션을 개발하는 중에 수정한 단축키가 적용이 안되는 버그를 발견.
구글링으로 “MFC Feature Pack accelerator issue” 라고 이미 알려진 버그였음.
( MS VC++ 라이브러리 개발팀에선 설계상의 제한사항이며 버그가 아니라하네요.
http://connect.microsoft.com/VisualStudio/feedback/details/540924/mfc-feature-pack-accelerator-issue )
프로그램이 종료될때 MFC에서 단축키정보를 레지스트리에 저장하고, 프로그램이 시작될때 레지스트리에서 읽기때문에, 레지스트리에 이미 저장된 단축키가 있으면, 단축키를 수정해도 적용안됨(그럼 accelerator는 왜 만든거지... ㅠㅠ)
해결방법은
- 사용자가 직접 레지스트에 저장된 내용을 지운다.
레지스트리 경로: HKEY_CURRENT_USER\Software\???\???\Workspace\Keyboard-0
단점: 전문지식이 없는 사용자에게 레지스트를 직접건드리게 하는 것은 좋은 방법이 아니고,이미 프로그램이 배포된 상황에서는 비현실적인 해결책이다. - 프로그램이 시작될때 레지스트리에서 읽은 단축키 정보를 초기화한다.
CWinAppEx의 LoadCustomState를 오버라이드하고 키보드 메니져를 리셋하는 방법.(이 또한 좋지만은 않아보이지만.. 그래도 어쩌겠어.. 이렇게 라고 리셋해줘야지.. -_-)
1 2 3 4 5 6 7 | virtual void LoadCustomState() override { __super::LoadCustomState(); // 레지스트리에서 로드한 저장된 단축키를 지우고, 리소스의 것을 사용하도록 한다. GetKeyboardManager()->ResetAll(); } |