参考文章:
http://msdn.microsoft.com/en-us/library/bb416670.aspx
http://hi.baidu.com/donghaozheng/blog/item/2165c3112f5c8d17b8127bc7.html
http://blog.csdn.net/tellmenow/archive/2006/08/06/1026197.aspx
开发环境:
Visual C++ 2008 SP1
SmartPhone 2003 QVGA
序:
对现有的两个游戏机模拟器的WindowsMobile版不满意,在我的横屏手机上玩有很多问题,开始学习WindowsMobile开发,希望能早日改进这两个模拟器。
最终成果图片:
正文:
WindowsMobile的Win32 API方式开发和桌面Windows下差不多,根据VS的工程向导新建Win32智能设备工程后,选了SmartPhone 2003平台,向导自己生成了相关代码,和一个直接使用Win32 API构建的桌面程序框架几乎相同。
但是在CommandBar菜单创建方面是新内容。
工程里多了后缀为rc2的资源,该资源不能由VC的资源编辑器可视化编辑,因此该资源被独立出来方便手工编辑,按查看代码方式打开后里面是IDR_MENU的描述
以上代码中的菜单项描述,一般程序中必须要关注的有以下几项:
第2个参数(此处为IDM_OK):如果希望在CommandBar上的是一个按钮,那么这个参数指定的就是该按钮在WM_COMMAND消息触发时的wmId编号
第4个参数:指定了该菜单项的Style,如果希望在CommandBar上的是一个按钮,那么就要用TBSTYLE_BUTTON,如果希望是一个子菜单,那就要用TBSTYLE_DROPDOWN,当然还有些其他类型的。
第5个参数(此处为IDS_OK):该项的字符串资源名,用于显示,比如这里IDS_OK默认就是"确定",该程序编译运行后,左下角的按钮就显示"确定"
第7个参数(此处为NOMENU):对于TBSTYLE_BUTTON的菜单项,这里一般就设成NOMENU了,而对于需要构造子菜单的程序,这里就要填上一个编号,指明插入的子菜单是受引用的外部菜单的第几项POPUP菜单。
比如我现在不满意这样简单的菜单结构,我希望CommandBar上有左软键和右软键各自对应的一个按钮,并且左软键对应的是一个直接的按钮,而右软键对应的是一个菜单。那么改写步骤如下:
添加子菜单资源
在工程树中双击后缀名为rc的标准资源,打开了资源树,在其中添加一组Menu资源,加入两个总菜单,File和Edit,在File菜单下再放上3个项目Test、分割线、Exit,在Edit菜单下放上1个项目Copy。保存资源。这样该Menu自动命名为IDR_MENU1,这个ID定义名可以根据需要修改。
用查看代码方式打开.rc文件发觉其中多了如下内容:
然后改写.rc2的代码,将其修改成如下内容:
这样改动后编译运行,就可以看到左软键依然对应一个按钮,而右软键对应的不再是空控件了,而是一个名为"右键"的菜单,按下右软键弹出的菜单里就包含Test、分割线、Exit三项。
如果修改rc2中第二个菜单描述项的最后一个参数为1,那么右键菜单中弹出的就是包含Copy的菜单了。
最终成果图片: