vs2005+wm6.1 平台下应用程序的菜单不显示问题

最近做PDA上的应用程序,VS2005环境下采用MFC方式开发(Win32 API/C#/WTL均不熟练,水平有限,没办法...),在资源编辑器中编辑好菜单,运行时始终无法显示我编辑的菜单,而只能显示WM默认的两个菜单项("NEW"和"MENU"),搞了好长时间,Google、百度里中/英文搜索了半天,终于解决了这个对新手来说看似简单,实则不然的问题。废话不多说,言归正传。

   

   

    vs2005中的智能设备菜单分两个部分,一个是.rc文件里的部分,用来定义菜单项,一个是.rc2文件里的部分,用来定义菜单按钮.

其实准确的说,sp或ppc里的程序菜单,在vs2005中,这个并没有定义为一个"菜单(Menu)",而是"工具条(Toolbar)",所以仅在.rc里定义是不够的,.rc2要把工具条按钮和菜单项对应起来.可vs2005偏偏不会自动生成.rc2的代码,只能手工输入.

    也就是说,.rc中的代码(在相关资源文件如.rc上右击->view code即可看到代码)是我们通过资源编辑器编辑时由VS2005 IDE根据我们的编辑情况自动生成的,它里面描述的是菜单项的具体内容(即子菜单)。

    而.rc2中的代码不是IDE自动生成,当我们通过向导建立新工程后,它的内容是默认生成的,而且不会被自动改变。要命的是,.rc2中保存的是菜单条(也就是一级菜单,vs把它当做toolbar对待),这个菜单条不会随着我们编辑菜单项而改变,其结果就是,每次编译运行程序,你会发现自己编辑的菜单没有显示,显示出来的总是默认的那两个菜单!

    以建立一个基于MFC的单文档程序为例,.rc2中的典型代码如下

IDR_MAINFRAME SHMENUBAR DISCARDABLE
BEGIN
    IDR_MAINFRAME,
    2,
   
    I_IMAGENONE, ID_FILE_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
    IDS_NEW, 0, NOMENU,

    I_IMAGENONE, IDM_MENU, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,
    IDS_MENU, 0, 0,
END

 

   

现在来说明一下这段代码:

第一行开头是工具条的ID,和你在资源编辑器中定义的顶层下拉菜单的ID要一样,整行也可以写成IDR_MENU RCDATA

BEGIN和END中:
第一行是工具条的ID,

第二行是按钮的个数, 然后每个按钮定义占一行

如果是一个按钮,就是不带下拉菜单(呵呵,sp和ppc里好像都是上拉)的,这样定义:
I_IMAGENONE, IDOK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_OK, 0, NOMENU,
如果是一个菜单,这样定义
I_IMAGENONE, IDR_MENU, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_RMENU, 0, 1,

先看相同的部分(无下划线)
I_IMAGENONE,sp和ppc的菜单/工具条按钮是没有图标的,TBSTATE_ENABLED是定义按钮有效,无效就是TBSTATE_DISABLED了,这里的按钮也不需要定义大小(是不能吧),就用TBSTYLE_AUTOSIZE,剩下那个0我不知道什么意思

再看不同的部分
第一个,如果是按钮设置按钮ID,此时,这个ID和在资源视图创建的菜单没有任何关系,所以这个ID就需要在Resource.h等文件(不同方法建立的工程这个文件不同把,应该好找)里自己定义;如果是下拉菜单,就直接用主菜单的ID,这里就是IDR_MENU
第二个,我就不说了,看内容就知道了
第三个,这里是按钮还是下拉菜单都是一个东西,就是按钮或者下拉菜单的标题,对应着资源视图里的字符串资源,自己添加就行了
第四个,如果是按钮,则用NOMENU,如果是下拉菜单,就用子菜单在主菜单里的位置,0是第一个,1是第二个...

 

反正, .rc2文件里根据你在资源编辑器中定义的顶层菜单项个数定义相同个数的按钮就行,剩下的可以在图形方式的菜单设计界面里完成. 这样手动修改.rc2文件后,我们编辑的菜单就可以正确地显示出来!

 

好了,基本的都说完了,文字组织的有点乱,不晓得大家能不能看明白。不懂的可以给我留消息,大家共同研究,共同进步。

PS: 文中有些内容是从别人那里ctrl+c/ctrl+v的(主要是懒得重新码字,很晚了,困),下面附上我摸索过程中受到启发的链接,希望对大家有帮助。

http://www.techppc.com/read-htm-tid-104.html

http://hi.baidu.com/rocking2807/blog/item/529dac009ef91b84e950cdd6.html

http://yuewen.blog.51cto.com/297737/57002

http://blogs.msdn.com/johnkenn/archive/2005/08/22/454858.aspx

http://msdn.microsoft.com/en-us/library/6t3612sk(VS.80).aspx

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值