关闭

[翻译]-Windows CE 程序设计 (3rd 版)--5.2 公共控件(十)

标签: 嵌入式windows编程shell工具工作
3283人阅读 评论(4) 收藏 举报
分类:

                      菜单条                                        翻译:tellmenow

菜单条控件是在Pocket PC 2000中开始引入的。从外观上看,菜单条同命令条的不同之处在于它是位于窗口底部而不是顶部。但是,对程序员来说,菜单条有许多不同的编程接口。因为Pocket PC的流行以及OEM厂商希望能够创建同Pocket PC软件兼容的嵌入式系统,所以从Windows CE.NET 4.2开始,现在菜单条同Windows CE的嵌入式版本一起发布。

菜单条是一个精巧复杂的控件,这使得它不适合手工编程。菜单条控件的设计者似乎也有意通过代码向导和资源编辑器来完成菜单条控件的大部分编码和资源产生。虽然这是大部分Windows程序员编码的方式,但了解菜单条控件实际上是如何工作的依然是很重要的,尤其是当工具不能完全符合工作需要的时候。出于这个原因,在本节,我将在基本的API级别上描述菜单条。因此,我可以准确的描述出希望的控件外观,特别是用资源的方式来描述。对书中后面的例子,当我在例子中使用菜单条时,我将用代码向导来产生菜单条上的菜单。

在一头钻进去编写菜单条之前,我想简单讲一下如何设计控件。在许多方面,菜单条都和Windows CE系统中使用的其它命令条控件不同。首先,菜单条上的菜单不是作为一个整体来管理的。相反,虽然菜单被定义成一个单一资源,但是菜单条将菜单作为一系列独立的子菜单来管理。

当菜单条上对应的按钮被点中时,每个子菜单都被当作一个弹出菜单显示在适当的位置上。所以,从这个意义上讲,同命令条相比,菜单条更像是一个工具条。

用户很少能看到菜单条和命令条之间的差别,因为菜单按钮是按期望的方式,彼此相邻的摆放在菜单条的最左边的。然而,对于程序员来说,理解差异的重点在于理解如何管理和操纵菜单条。

和命令条的另一个不同点在于,菜单条并不是创建它的窗口的子窗口。菜单条控件实际上是系统创建的一个弹出窗口,并放在屏幕底部而已。创建菜单的窗口可以通过覆盖菜单条来将其隐藏起来。菜单条的部分可以被绘制到它的拥有者的上层。为了避免这种情况,应用程序必须调整窗口尺寸来为桌面上菜单条留出空间。应用程序同菜单条之间的这种纠缠,就是为什么使用菜单条控件的应用程序要手工调整其主窗口的原因。

图5-5展示了Pocket PC上的菜单条,图5-6显示了在嵌入式系统中运行同样的应用程序时的界面。将要讨论的两个菜单条外观上微小差异还是存在的。
图5-5(略):Pocket PC设备上的菜单条。
图5-5(略):嵌入式系统上的菜单条。

Pocket PC上的菜单条在控件最左边包含了软键盘(SIP)按钮。在嵌入式设备上,SIP按钮在任务条上,而不在菜单条上。作为SIP按钮的替代,嵌入式设备上的菜单条有一个[关闭]按钮,同Pocket PC相比,在嵌入式设备屏幕顶部的导航条上有一个轻巧的[最小化]按钮。最后,即使是拥有同样菜单条资源的非常相似的应用程序,在Pocket PC版的菜单条最左边有一个叫[新建]([NEW])的菜单。这是shell的一个扩展,但嵌入式设备并不支持。因为缺乏这个Shell支持,所以即使用来创建菜单条的资源中指定了[新建]菜单,菜单条不能创建[新建]菜单。

菜单条在Pocket PC和嵌入式设备中的另一个不同是菜单条的高度。因为菜单条高度随系统的不同而不同,所以必须编程来判断菜单条的高度。老一些的Pocket PC应用程序,包括本书前几版中的程序,都是假设菜单条是26像素高。既然现在菜单条控件用在各种系统上,那么这个假设就不成立了。一种计算菜单条高度的方式是用菜单条句柄作为参数来调用GetWindowRect函数。下面的代码是在WM_CREATE消息处理函数中,菜单条创建后就计算高度。

RECT rectMB;
GetWindowRect (hwndMenuBar, &rectMB);
nMBHeight = (rectMB.bottom - rectMB.top);

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:256928次
    • 积分:3272
    • 等级:
    • 排名:第10767名
    • 原创:2篇
    • 转载:0篇
    • 译文:50篇
    • 评论:199条
    最新评论