二、Windows菜单
您还记得Monty Python有关奶酪店的幽默短剧吗?那故事内容是这样的:一个客人走进奶酪店想买某种奶酪。当然,店里没有这种奶酪。因此他又问有没有另一种奶酪,然后再问另一种,再问另一种,不断的问店家有没有另一种奶酪(最后总共问了40种的奶酪),回答仍然是没有,没有,没有,没有,没有。
这个不幸的事件可以通过菜单的使用来避免。一个菜单是一列可用的选项,它告诉饥饿的用餐者,厨房可以提供哪些服务,并且-对于Windows程序来说-还告诉使用者一个应用程序能够执行哪些操作。
菜单可能是Windows程序提供的一致使用者接口中最重要的部分,而在您的程序中增加菜单,是Windows程序设计中相对简单的部分。您在Developer Studio中定义菜单。每个可选的菜单项被赋予唯一的ID。您在窗口类别结构中指定菜单名称。当使用者选择一个菜单项时,Windows给您的程序发送包含该ID的WM_COMMAND消息。
讨论完菜单后,我还将讨论键盘快捷键,它们是一些键的组合,主要用于启动菜单功能。
菜单概念
窗口的菜单列紧接在标题列的下方显示,这个菜单列有时被称为「主菜单」或「顶层菜单」。列在顶层菜单的项目通常是下拉式菜单,也叫做「弹出式菜单」或「子菜单」。您也可以定义多重嵌套的弹出式菜单,也就是说,在弹出式菜单上的项目可以存取另一个弹出式菜单。有时弹出式菜单上的项目呼叫对话框以获得更多的信息(对话框在下一章介绍)。在标题列的最左端,很多父窗口都显示程序的小图标,这个图标可以启动系统菜单。它实际上是另一个弹出式菜单。
弹出式菜单的各项可以是「被选中的」,这意味着Windows在菜单文字的左端显示一个小的选中标记,选中标记让使用者知道从菜单中选中了哪些选项。这些选项之间可以是互斥的,也可以不互斥。顶层菜单项不能被选中。
顶层菜单或弹出式菜单项可以被「启用」、「禁用」或「无效化」。「启动」和「不启动」有时候被当作「启用」和「禁用」的同义词。被启用或禁用的菜单项在使用者看来是一样的,但是无效化的菜单项是使用灰色文字来显示的。
从使用者的角度来看,启用、禁用和无效化的菜单项都是可以「选择的」(被选择的菜单项目会被加高亮度显示),也就是说,使用者可以使用鼠标选择被禁用的菜单项,将反相显示光标列移动到禁用的菜单项上,或者使用菜单项的关键词母来选择该菜单项。然而,从程序写作者的角度来看,启用、禁用和无效化菜单项的功能是不同的。Windows只为启用的菜单项向程序发送WM_COMMAND消息。要让选项变得无效,可以把那些菜单项禁用和无效化。如果您想让使用者知道选择是无效的,那么您可以让一个菜单项无效化。