c – 为什么CMFCMenuBar没有使用加速器表?
发布时间:2020-12-16 10:45:02 所属栏目:百科 来源:网络整理
导读:在使用VS2008的doc / view项目中,MFCMenuBar似乎从项目中加载了正确的MENU资源(IDR_MAINFRAME),因为添加和删除菜单项会反映在菜单的UI中.它甚至会将加速器附加到默认菜单项(例如Ctrl O到Open …项).但是,加速器表(IDR_MAINFRAME)似乎没有连接到菜单.将Open
在使用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使用我的加速器表并且不附加加速器或附加正确的加速器? 解决方法
刚刚花了太多时间来解决这个问题,我想我会发布看起来对我有用的解决方案.
我打电话 : theApp.GetKeyboardManager() – > ResetAll(); 从注册表加载MDI框架之后(我已经创建了一个名为PostLoadFrame()的特定函数,我在调用LoadFrame()之后立即调用它,这是注册表似乎被读取的地方). 此函数调用忽略从注册表加载的任何加速器(这对我来说很好,因为我不允许自定义它们)并使用资源文件中的加速器. 就像我说的那样,在我的申请中似乎对我有用.如果您确实允许自定义加速键,那么看起来可以将资源文件和注册表存储的值与CKeyboardManager中的其他函数合并,但它有点复杂. 我希望在某些地方帮助某人节省我失去的一些时间! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |