VS2008 feature pack 菜单没法显示快捷键的解决方法

之前遇到过一个加速键表即使是填写了菜单ID与加速键对应关系,但由于Focus不在MainFrame上(有可能是其他窗口如ControlBar)而造成加速键不作用的问题,所以采用了KeyBoard Hook的方式来进行处理快捷键。

具体用法可以参考::SetWindowsHookEx这个API。

::SetWindowsHookEx需要传入一个回调函数,这个回调函数中就可以进行键盘消息处理。

为了方便映射到MainFrame的功能,我在回调函数中又调用了MainFrame的一个专门处理键盘消息的自定义函数。

然后再自定义函数中,将键盘消息转换为对应WM_COMMAND消息进行再次转发。

这样就实现了加速键相当的功能。

这种方式在处理加速键上很有效,由于整个系统有几十个菜单项具有加速键,所以一次性处理起来也很方便。

然而麻烦还是产生了,在VS2008上,我发现使用这种方式后,菜单的加速键是可以起作用了,效果也很好。

唯一的麻烦是,无法再UI上看到相应菜单的加速键。

比如‘File’->'New'后面一般都跟一个Ctrl+N, 'File'->'Open'后面一般跟一个Ctrl+O,但这个程序中只能看到‘New’,'Open',不见了加速键的标签。

看资源 New的名字是'New\tCtrl+N', 好像\t后面都被截断了。为了验证我的想法,我把'New\tCtrl+N'改为'New     Ctrl+N'效果是有了,加速键可以显示在菜单项上。

但是几个菜单项之间的加速键对不齐(本来这些应该是右对齐)。

后来新建一个MFC Project,发现人家这个是可以正常显示的,百思不得其解。百度,Google也无法搜到答案。

对比两个工程,也没发现什么问题,我的CMFCMenuBar和MFC生成的Project并无明显差异。

 

后来只能从资源本身来入手,我的思路是,先改MFC生成的那个Project看看能不能整成不能显示加速键的效果。

MFC自动生成的Project,有个加速键表,而我的Project由于是自己处理加速键,所以加速键表我都给删除了。

我将MFC Project的加速键表中的项目删除,发现一样没有了加速键显示在菜单项上。

 

因此,我认为,应该是MFC在处理加速键的时候,这些信息还是需要填写。所以在我自己的工程中加上加速键表信息。

加上之后,清理下注册表(VS2008会把UI Doking信息填入到注册表)。显示一切正常。

 

特此记录以备忘。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值