bsr*_*uth 3 c++ mfc accelerator mfc-feature-pack
在使用VS2008的doc/view项目中,MFCMenuBar似乎从项目中加载了正确的MENU资源(IDR_MAINFRAME),因为添加和删除菜单项会反映在菜单的UI中.它甚至会将加速器附加到默认菜单项(例如Ctrl + O到Open ...项目).但是,加速器表(IDR_MAINFRAME)似乎没有连接到菜单.将Open ...的默认Ctrl + O更改为Ctrl + 7之类的功能不起作用.Ctrl + O仍然附加到Open ...菜单项,Ctrl + O仍然调用Open ...处理程序.资源文件中只有一个加速器表,所以我不知道CMFCMenuBar在哪里获取其加速器信息.
此时,我已经能够通过手动加载IDR_MAINFRAME加速器表并自己翻译消息来使加速器工作.但CMFCMenuBar仍然附加默认加速器.
谁能解释一下这里发生了什么?如何强制MFCMenuBar使用我的加速器表并且不附加加速器或附加正确的加速器?
Red*_*eye 15
刚刚花了太多时间来解决这个问题,我想我会发布看起来对我有用的解决方案.
我打电话 :
theApp.GetKeyboardManager()->ResetAll();
从注册表加载MDI框架之后(我已经创建了一个名为PostLoadFrame()的特定函数,我在调用LoadFrame()之后立即调用它,这是注册表似乎被读取的地方).
此函数调用忽略从注册表加载的任何加速器(这对我来说很好,因为我不允许自定义它们)并使用资源文件中的加速器.
就像我说的那样,在我的申请中似乎对我有用.如果您允许自定义加速键,那么看起来可以将资源文件和注册表存储的值与CKeyboardManager中的其他函数合并,但它有点复杂.
我希望在某些地方帮助某人节省我失去的一些时间!