Post Print Search
帖子排序:    
帖子发起人: 绝地风暴   发起时间: 2006-02-16 14:37   回复: 2
danielking 离线,最后访问时间: 2006-6-7 10:20:45 绝地风暴



发帖数前25位

注册: 2005-11-28
发贴: 9
[原创]如何在VC++2005给SP/PPC程序添加菜单
楼主  2006-02-16, 14:37 Reply Quote

网上的文章好像也不太详细,所以每次搞不掟的时候都想放弃vs2005,重新用evc4,但又放不下vs2005强大的IDE功能和亲切的中文界面,还有和C#混合编程的方便,以及ARM处理器的模拟器(可以直接安装实机的软件,evc的模拟器cpu是x86的)

今天编写了一堆的工程,一个一个的试,总算试成功了,也大概知道是怎么回事了.

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

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

好在把rc2里面那些代码弄清楚怎么回事了也就很容易了.

先在资源视图中添加一个菜单比如ID为IDR_MENU,菜单中有两个菜单项,每个菜单项里都有子菜单
主菜单中两个菜单项的标题无所谓是什么,因为用不到,显示的时候用的是工具栏按钮的标题.

然后在.rc2文件中添加如下代码
[CODE]IDR_MENU SHMENUBAR DISCARDABLE
BEGIN
 IDR_MENU,
 2,
 I_IMAGENONE, IDR_MENU, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,
 IDS_LMENU, 0, 0,
 I_IMAGENONE, IDR_MENU, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,
    IDS_RMENU, 0, 1,
END[/CODE]
这样显示效果差不多就是刚刚我们用图形界面设计的菜单的样子.

[CODE]IDR_MENU SHMENUBAR DISCARDABLE
BEGIN
 IDR_MENU,
 2,
 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, 0,
END[/CODE]
这样显示效果就是第一项是一个按钮,第二项是一个下拉菜单,它的子菜单是我们刚刚设计的菜单中的第一个子菜单(为什么是第一个,稍后说明,如果用第二个就把最后一个数字改成1).

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

第一行开头是工具条的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就需要在Resource.h等文件(不同方法建立的工程这个文件不同把,应该好找)里自己定义;如果是下拉菜单,就直接用主菜单的ID,这里就是IDR_MENU
第二个,我就不说了,看内容就知道了
第三个,这里是按钮还是下拉菜单都是一个东西,就是按钮或者下拉菜单的标题,对应着资源视图里的字符串资源,自己添加就行了
第四个,如果是按钮,则用NOMENU,如果是下拉菜单,就用子菜单在主菜单里的位置,0是第一个,1是第二个...,如果上面那段代码中两行的这个值对调一下,那么子菜单也就对调了.

反正.rc2文件里只需要定义两个按钮就行,剩下的可以在图形方式的菜单设计界面里完成.

可能有的地方说得不对,大家自己试试吧,不对的地方及时反应,共同提高.

IP 地址: 已记录   报告
lidanger 离线,最后访问时间: 2008-3-17 23:14:59 天虾无敌

发帖数前500位

注册: 2008-03-16
发贴: 1
Re: [原创]如何在VC++2005给SP/PPC程序添加菜单
第2楼  2008-03-16, 22:37 Reply Quote
终于找到一个别答案。。谢了。。
IP 地址: 已记录   报告
cxjin 离线,最后访问时间: 2008-9-9 13:02:10 cxjin

发帖数前50位

注册: 2008-01-31
发贴: 5
Re: [原创]如何在VC++2005给SP/PPC程序添加菜单
第3楼  2008-04-07, 12:06 Reply Quote
学习学习,多谢!
IP 地址: 已记录   报告
Mobile应用开发 » 移动开发技术 » Embedded VC » [原创]如何在VC++2005给SP/PPC程序添加菜单