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

翻译 2006年06月25日 14:11:00

                      菜单条                                        翻译: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);

相关文章推荐

Windows Ce程序设计第三版

  • 2012年04月02日 09:35
  • 629KB
  • 下载

windows程序设计(12):绘制自己的控件

上一小节中虽然也提到了绘制自己控件,但是由于时间紧迫,只是光有一个空壳子,里面并没有实际的内容,这次专门设计一个自己的控件。在这个程序中,设计了两个控件,一个显示4个指向朝外的三角形,点击它会使客户区...

windows ce程序设计(第二版)

  • 2006年11月24日 13:39
  • 1000KB
  • 下载

Windows程序设计 对话框控件访问的七种方法(2)

在对话框控件访问的七种方法(1)中介绍了对话框空间访问的第一类方法,下面介绍对话框控件访问的第二类方法: 在Windows程序设计中,基于对话框的程序设计,对对话框上控件的访问有多种方法。在这里...

《Windows程序设计》读书笔九 子窗口控件

第九章 子窗口控件
  • sesiria
  • sesiria
  • 2016年07月10日 00:59
  • 4547

MFC Windows程序设计学习笔记--控件

控件属于子窗口,父窗口移动时,子窗口也移动。父窗口销毁时,子窗口也销毁。 控件类型 WNDCLASS MFC类 按钮 “BUTTON” CButton 列表框 “LIST...

Windows程序设计学习笔记(四)自绘控件与贴图的实现

Windows系统提供大量的控件供我们使用,但是系统提供的控件样式都是统一的,不管什么东西看久了自然会厌烦,为了使界面更加美观,添加一些新的东西我们需要自己绘制控件。 控件在默认情况下并不进行自绘,如...
  • lanuage
  • lanuage
  • 2015年06月26日 21:16
  • 551
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[翻译]-Windows CE 程序设计 (3rd 版)--5.2 公共控件(十)
举报原因:
原因补充:

(最多只允许输入30个字)