无论怎么编辑,编译出来的菜单都是默认的。因为RES目录的rc2资源文件VS2005没有改。总是这样的:
IDR_MAINFRAME SHMENUBAR DISCARDABLE
BEGIN
IDR_MAINFRAME,
1,
I_IMAGENONE, IDOK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
IDS_OK, 0, NOMENU,
END
所以,无论怎么编辑都不行。
解决方法:
先改一下这个文件再编辑菜单。
比如说,改成这样:
IDR_MAINFRAME SHMENUBAR DISCARDABLE
BEGIN
IDM_MENU,
2,
I_IMAGENONE, IDOK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
IDS_OK, 0, NOMENU,
I_IMAGENONE, IDM_MENU, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_MENU, 0, 0,
END
那么,需要在编辑器中创建一个ID为IDM_MENU的菜单条,再建立一个IDS_MENU的字符串资源,改字符串就是显示出来的菜单的名字。
经过后续查证,VS2005针对Smartphone的菜单编辑器就是这样设计的,也就是在菜单编辑器中编辑的只是菜单的内容,这些内容是保存在rc文件中的,而菜单条是作为RCDATA保存在rc2资源文件中。
其思路应该源于WM5.0对与菜单的全新设计。在WM5.0中,无论是ppc中的菜单还是sp中的菜单,都是一样的,即支持左右软键,左右软键分别可以弹出一个菜单。所以,微软认为这个东西不是菜单,是工具条,而真正的菜单是左右软键弹出的那个东西。所以,在菜单编辑器中编辑的是左右软键弹出的菜单,而在rc2文件中保存的是工具条的定义。
也就是说,我们把编辑菜单的问题称为Bug也好,称为其他也好,但是总而言之,现在基于Smpartphone和wm5.0的本地代码开发,对于“工具条”的定义需要我们自己手动完成了。
针对RCDATA的定义,有一些说明:
IDR_MAINFRAME SHMENUBAR DISCARDABLE
IDR_MAINFRAME是在程序中load工具条的ID,在resources.h中定义一个ID就可以了。
SHMENUBAR DISCARDABLE不清楚,照抄就可以了。
BEGIN
IDM_MENU,
IDM_MENU是在菜单编辑中编辑菜单的ID,此菜单对于smartphone2003来说,横向的定义只能有一项(且文字内容是什么无关紧要),因为smartphone2003只支持左右键中一个是弹出菜单。对于wm5.0来说,可以有两项(尚未验证)。
2,
1或者2,取决于要左键还是左右都要。
I_IMAGENONE, IDOK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
IDS_OK, 0, NOMENU,
如果是button性质的,要定义为TBSTYLE_BUTTON,并且最后是NOMENU。IDOK为在资源头文件中随便定义的ID就可以,IDS_OK对应的字符串资源是将来显示的内容。
I_IMAGENONE, IDM_MENU, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_MENU, 0, 0,
如果是弹出式菜单,定义为TBSTYLE_DROPDOWN,且最后一位为0。IDM_MENU为在资源头文件中随便定义的ID就可以。
END
END之后一定要加一个回车,否则编译报 fatal error RC1004的错误。
更详细的内容,可以看一下这个网址:
[url]http://blogs.msdn.com/johnkenn/archive/2005/08/22/454858.aspx[/url]