加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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中的其他函数合并,但它有点复杂.

我希望在某些地方帮助某人节省我失去的一些时间!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读