Windows Mobile 菜单条资源使用

简介:

原文地址:http://hi.baidu.com/banwusan/blog/item/ffa78dc31e897856b219a829.html

 

菜单条资源         

     菜单条在很多方面都像一个工具条控件。查看菜单条使用的资源,会看到这两个对象的一些差别是在于外观上。图5-7显示了一个简单菜单条。
图5-7(略):一个打开了编辑菜单(Edit)的简单菜单条。

当创建菜单条时,SHMENUBARINFO结构中的nToolBarId域被适当的设置,因为nToolBarID标识的资源不是菜单资源,而是一个用于菜单条控件的定制资源。为了创建图5-7所展示的菜单条,资源编辑器将在.RC文件中创建下面的文本:
///////////////////////////////////////////////////////////////////////////
// Data
//
IDM_MENU SHMENUBAR MOVEABLE PURE 
BEGIN
     IDM_MENU, 4,
     I_IMAGENONE, IDM_SHAREDNEW, TBSTATE_ENABLED, TBSTYLE_AUTOSIZE, IDS_SHNEW, 
     0, NOMENU,
    I_IMAGENONE, ID_EDIT, TBSTATE_ENABLED, 
     TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_CAP_EDIT, 0, 0,
    I_IMAGENONE, IDM_MAIN_COMMAND1, TBSTATE_ENABLED, 
     TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_HELP, 0, 1,
     0, ID_BACKBTN, TBSTATE_ENABLED, TBSTYLE_AUTOSIZE, 0, ID_BACKBTN, 2,
END
   
///////////////////////////////////////////////////////////////////////////
// Menu bar
//
IDM_MENU MENU DISCARDABLE 
BEGIN
     POPUP "Edit"
     BEGIN
         MENUITEM "Cut",                          ID_EDIT_CUT
         MENUITEM "Copy",                         ID_EDIT_COPY
         MENUITEM "Paste",                        ID_EDIT_PASTE
     END
     POPUP "Tools"
     BEGIN
         MENUITEM "About",                        IDM_HELP_ABOUT
         MENUITEM "Options",                      ID_TOOLS_OPTIONS
     END
END

大多数情况下,不需要准确的知道资源编辑器在资源中放置了什么资源。然而,有必要了解格式,这样可以容易的更改使用了菜单条的应用程序,也可以在碰到使用的设备上资源编辑器不能创建菜单条控件的时候,来方便使用。资源实际上就是对工具条上按钮的描述。下面的代码提供了前述数据的格式:
IDM_MENU SHMENUBAR MOVEABLE PURE 
BEGIN
     IDM_MENU, 4,
   
    I_IMAGENONE, IDM_SHAREDNEW,      TBSTATE_ENABLED, 
       TBSTYLE_AUTOSIZE,                     IDS_SHNEW,     0,          NOMENU,
   
    I_IMAGENONE, ID_EDIT,            TBSTATE_ENABLED, 
       TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_CAP_EDIT, 0,          0,
   
    I_IMAGENONE, IDM_MAIN_COMMAND1, TBSTATE_ENABLED, 
       TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_HELP,      0,          1,
   
     0,            ID_BACKBTN,         TBSTATE_ENABLED, 
       TBSTYLE_AUTOSIZE,                     0,            ID_BACKBTN, 2,
END

资源文件中的第一行中,IDM_MENU是资源ID,SHMENUBAR是资源类型,MOVEABLE和PURE是资源标志。IDM_MENU作为ID需要传递到SHCreateMenuBar的SHMENUBARINFO 结构中。资源类型SHMENUBAR实际上被向导定义成了RCDATA,资源编译器将它理解成一个由应用程序使用的简单资源数据块。这一点很重要,因为SHMENUBAR并没有被定义在Pocket PC 的包含文件(include files)中,只有使用Pocket PC 应用向导(AppWizard)来创建菜单条资源时才会包含它。所以,对于非向导产生的菜单条资源文件,需要加入以下内容到RC文件中:#define   SHMENUBAR RCDATA

BEGIN/END块中第一行数据是:IDM_MENU, 4。这一行定义了菜单资源,用于创建菜单条上单独的弹出菜单。数字4表示该项在SHMENUBAR资源中的编号。每一项要么是菜单条上的弹出菜单,要么就是一个按钮。

因为书本印刷格式的原因,导致大家看到的前面的资源描述中每项的描述都被折成了两行。让我们看一下资源中的最后一项--回退(Back)按钮项:
0,     ID_BACKBTN, TBSTATE_ENABLED, TBSTYLE_AUTOSIZE, 0,   ID_BACKBTN, 2,

对该行进行垂直折行,加入注释后,资源描述如下:

0,                             // Bitmap index
ID_BACKBTN,                    // WM_COMMAND ID value
TBSTATE_ENABLED,               // Initial state of "button"
TBSTYLE_AUTOSIZE,              // Style of "button"
0,                             // String resource ID of text label
ID_BACKBTN,                    // String resource ID of tooltip
2,                             // Submenu index

菜单条上该项的图片在位图数组中的索引就包含在第一个域中。如果该项没有位图,就设置成I_IMAGENONE。在上面的例子中,使用的图片是位图数组中的第一个。下一个域包含该项的ID值。对按钮来说,该值就是当按钮被点压时随WM_COMMAND消息发送到父窗口的那个ID值。对于菜单来说,当查询子菜单句柄的时候可以用这个ID来标识子菜单。因为shell在菜单条中会使用自己的ID集合,所以应用程序不应该使用小于100的值。这条规则一样适用于菜单、按钮以及字符串资源ID。

菜单条使用两个预定义的菜单项ID:IDM_SHAREDNEW 和 IDM_SHAREDNEWDEFAULT。这两个ID会添加一个New(新建)菜单项,用来显示其它应用程序注册的菜单项。两个ID的区别是,简单的点一下菜单项,IDM_SHAREDNEWDEFAULT就会显示一个新的菜单项。而使用IDM_SHAREDNEW,则将New菜单变成了一个带下拉箭头的按钮。在New按钮上点击,会发送WM_COMMAND消息到父窗口,指出应该创建一个新文档。在箭头上点击则显示新菜单自身。对于非Pocket PC系统,只有当shell为系统提供New菜单支持的时候,New菜单才会显示在菜单条上,否则,预定义的新菜单项ID将被忽略。

接下来的两个域是按钮/根菜单项的初始状态和风格。状态域使用的是工具条的状态标志来进行描述的,例如TBSTATE_ENABLED 和TBSTATE_CHECKED。对于菜单,状态几乎总是TBSTATE_ENABLED。风格域也是使用工具条风格标志来描述的,例如用于按钮的TBSTYLE_BUTTON,用于菜单项的TBSTYLE_DROPDOWN。有文本而不是位图的项以及包含位图的项通常也会设置TBSTYLE_AUTOSIZE 来告诉菜单条调整按钮的尺寸来适应菜单项中的文本。

下一个域是菜单项文本的字符串资源ID。文字和第一个域中指定的图片是并排摆放的。在上面的例子中,该项只是一个简单的位图按钮,所以没有指定字符串资源。对菜单项来说,是字符串资源来标记菜单,而不是在菜单资源中指定的子菜单名。如果需要的话,您可以使用7个预定义的字符串ID,它们作为自解释型常量被定义在Aygshell.h文件中。
#define IDS_SHNEW            1
#define IDS_SHEDIT           2
#define IDS_SHTOOLS          3
#define IDS_SHVIEW           4
#define IDS_SHFILE           5
#define IDS_SHGO             6
#define IDS_SHFAVORITES      7
#define IDS_SHOPEN           8
如果您需要一个不同的文本,那么您的应用程序必须用字符串资源定义文本,并将ID传递到这个域中。下一个域是工具提示信息(tool tip)域。同样,您必须使用字符串资源ID来填充这个域。

最后一个域规定了子菜单,当用户点这个项,就会弹出来。只有风格域包含TBSTYLE_DROPDOWN标志(表示该项附加了一个菜单),这个子菜单值才是有效的。这个值代表子菜单的菜单资源索引。本节提到的例子中有两个子菜单:编辑(Eidt)菜单,包含了Cut,Copy和Paste三个菜单项;工具(Tools)菜单,包含About和选项(Options)两个菜单项。 按钮上显示的文字是来自菜单条资源中,而不是来自菜单资源。例如,

可以按下面的代码来修改菜单资源,而不用改变菜单条中的文本。
///////////////////////////////////////////////////////////////////////////
// Menu bar
//
IDM_MENU MENU DISCARDABLE 
BEGIN
     POPUP "Cat"
     BEGIN
         MENUITEM "Cut",                          ID_EDIT_CUT
         MENUITEM "Copy",                         ID_EDIT_COPY
         MENUITEM "Paste",                        ID_EDIT_PASTE
     END
     POPUP "Dog"
     BEGIN
         MENUITEM "About",                        IDM_HELP_ABOUT
         MENUITEM "Options",                      ID_TOOLS_OPTIONS
     END
END
现在,根菜单名字是Cat和Dog,而不是Edit和Options。因为菜单条从菜单条项中取名字,而不是从菜单资源中取,所以这个改变并没有影响应用程序。

对菜单条的长篇描述是让您了解基础知识。只有在很少见的情况下,才需要您手工操纵资源。当然,这些知识很容易使用的。


本文转自peterzb博客园博客,原文链接:http://www.cnblogs.com/peterzb/archive/2009/05/19/1460966.html,如需转载请自行联系原作者。

目录
相关文章
|
4月前
|
Shell Windows
Windows【工具 03】QuickLook-3.6.11安装并设置开机自启动(含较难下载的 QuickLook-3.6.11 安装包百度云盘资源)
Windows【工具 03】QuickLook-3.6.11安装并设置开机自启动(含较难下载的 QuickLook-3.6.11 安装包百度云盘资源)
56 0
|
4月前
|
Java
Java【付诸实践 04】Jar包class文件反编译、修改、重新编译打包方法(含反编译工具jd-gui-windows-1.6.6.zip百度云资源)
Java【付诸实践 04】Jar包class文件反编译、修改、重新编译打包方法(含反编译工具jd-gui-windows-1.6.6.zip百度云资源)
144 0
|
4月前
|
存储 数据可视化 数据库
InfluxData【付诸实践 01】Windows环境部署Telegraf+Influxdb+Grafana安装及使用配置(含百度云盘资源+demo脚本)
InfluxData【付诸实践 01】Windows环境部署Telegraf+Influxdb+Grafana安装及使用配置(含百度云盘资源+demo脚本)
76 0
|
10月前
|
数据可视化 Windows
Windows编程资源,菜单资源,图标资源,光标资源,上下文菜单,字符串资源,加速键资源(下)
Windows编程资源,菜单资源,图标资源,光标资源,上下文菜单,字符串资源,加速键资源(下)
|
10月前
|
数据可视化 编译器 Windows
Windows编程资源,菜单资源,图标资源,光标资源,上下文菜单,字符串资源,加速键资源(上)
Windows编程资源,菜单资源,图标资源,光标资源,上下文菜单,字符串资源,加速键资源
|
Windows
Windows应急响应-异常资源
端口 检查端口连接情况,是否有远程连接、可疑连接。 检查方法 1. 使用`netstat -ano` 命令查看目前的网络连接,定位可疑的 ESTABLISHED 2. 根据 netstat 命令定位出的 PID 编号,再通过 tasklist 命令进行进程定位 `tasklist | findstr "PID"`
78 0
|
Windows
Windows 右键 图标-菜单无法打开-资源管理器重启-explorer.exe停止与 Windows 交互并关闭【已解决】
Windows 右键 图标-菜单无法打开-资源管理器重启-explorer.exe停止与 Windows 交互并关闭【已解决】
405 0
Windows 右键 图标-菜单无法打开-资源管理器重启-explorer.exe停止与 Windows 交互并关闭【已解决】
|
安全 应用服务中间件 nginx
Windows使用Nginx配置本地文件代理(查看本地资源或图片)
Windows使用Nginx配置本地文件代理(查看本地资源或图片)
660 0
Windows使用Nginx配置本地文件代理(查看本地资源或图片)
|
监控 测试技术 Windows
软件测试面试题:LoadRunner中如何监控Windows资源?
软件测试面试题:LoadRunner中如何监控Windows资源?
68 0
|
缓存 负载均衡 网络协议
windows之DNS7种资源记录和flushdns命令清除DNS缓存以及nslookup解析域名和ipconfig/all命令查看网络配置使用总结
windows之DNS7种资源记录和flushdns命令清除DNS缓存以及nslookup解析域名和ipconfig/all命令查看网络配置使用总结
428 0
windows之DNS7种资源记录和flushdns命令清除DNS缓存以及nslookup解析域名和ipconfig/all命令查看网络配置使用总结