Futurebasic/Language/Reference/menu 语句
创建或更改菜单:MENU menuID, itemID, state [,string$]
取消菜单栏的突出显示:MENU
2002 年 2 月(6.0 版)
描述
使用此语句可执行以下任何操作
- 在菜单栏中添加新菜单。
- 启用或禁用菜单。
- 向现有菜单添加新项目。
- 启用或禁用菜单项。
- 在菜单项中添加或删除复选标记。
- 更改菜单项的文本。
- 指定要附加到菜单项的层次子菜单
- 取消菜单栏的突出显示。
要向菜单栏添加新菜单
- 将
menuID
参数设置为现有菜单未使用的数字。使用 1 到 31 之间的数字。 - 将
itemID
参数设置为零。 - 将
state
参数设置为_enable
或_disable
,具体取决于您希望菜单最初是启用还是变暗(您可以稍后更改此状态)。 - 将
string$
参数设置为您希望作为新菜单标题显示的文本。
这将创建一个新的空菜单(请参阅以下内容,了解如何向菜单添加项目)。您为 menuID
选择的值将确定新菜单在菜单栏中的位置;菜单会根据其 menuID
编号的升序从左到右自动定位。几乎总是,您会希望为菜单分配从 1 开始的连续编号。
要启用或禁用(变暗)现有菜单
- 将
menuID
参数设置为现有菜单的 ID 编号。 - 将
itemID
参数设置为零。 - 将 state 参数设置为
_enable
或_disable
。 - 不要指定
string$
参数(如果您指定,所有菜单项都会消失!)
要向现有菜单添加新项目
- 将
menuID
参数设置为现有菜单的 ID 编号。 - 将
itemID
参数设置为菜单中任何其他项未使用的正数。此数字决定了项目在菜单中的位置;项目从上到下连续编号,从 1 开始。如果您“跳过”项目,则将显示空白或灰色分隔线,具体取决于您使用的是哪个版本的系统软件。请注意,项目之间的灰色分隔线有其自己的项目 ID 编号。您可以通过在string$
参数中使用元字符“-”来创建灰色分隔线。 - 将
state
参数设置为_enable
、_disable
或_checked
,具体取决于您希望项目的初始状态是什么(您可以稍后更改此状态)。 - 将
string$
参数设置为您希望在项目中显示的文本。请注意,当您添加新项目时,string$
中的某些特殊字符不会出现在项目文本中,但具有其他特殊含义。请参阅下面的“元字符”表。
要启用、禁用(变暗)或选中现有项目
- 将
menuID
和itemID
参数设置为现有菜单中的现有项目。 - 将
state
参数设置为_enable
、_disable
或_checked
。请注意,将 state 设置为_enable
或_disable
将删除项目上任何现有的复选标记。
要更改现有项目的文本
- 将
menuID
和itemID
参数设置为现有菜单中的现有项目。 - 将
string$
参数设置为所需的文本。请注意,当您更改现有项目的文本时,string$
中的所有字符都将出现在项目文本中,并且没有字符会被解释为“元字符”。
要指定要附加到菜单项的层次子菜单
- 将
menuID
参数设置为现有菜单的 ID 编号;这是将包含子菜单的“父”菜单。 - 将
itemID
参数设置为菜单中任何其他项未使用的正数。这是子菜单将附加到的“父”项目。 - 将
state
参数设置为子菜单的 ID 编号。这应该是一个 32 到 235 之间的数字,它没有被任何其他菜单使用。 - 将
string$
参数设置为以这两个字符结尾的字符串:"/" + CHR$(&1B)
。
注意:上述过程将子菜单附加到父菜单项,但它不会安装子菜单。要安装子菜单,您还需要调用 Toolbox 过程 InsertMenu
。请参阅下面的示例。
要取消菜单栏的突出显示
- 执行
MENU
语句,不带任何参数。每当用户选择菜单项时,菜单栏都会自动突出显示,并且在您的程序取消突出显示它之前,它会保持突出显示状态。通过取消突出显示菜单栏,您的程序让用户知道与该菜单项关联的操作已完成。
元字符 此表中的字符在您添加新菜单项时,在 string$
参数中出现时具有特殊含义。请注意,当您更改现有项目的文本时,string$
中的所有字符都将出现在项目文本中,并且没有字符会被解释为元字符。此规则的例外情况是以减号开头的字符串。减号是大多数菜单定义用来绘制分隔线的标志。如果您的项目需要包含减号,您可以通过在字符前放置一个空格来正确显示项目。
IMAGE WAS HERE
创建层次菜单 您可以使用以下函数添加新的菜单项并将新的层次菜单附加到它。您应该将 childMenuID
设置为 32 到 235 之间的某个数字,该数字没有被任何现有菜单使用。
LOCAL FN MakeHierMenu(parentMenuID,parentMenuItem,¬ itemString$,childMenuID)
title$ = "!"+chr$(childMenuID)+itemString$ + "/" + CHR$(&1B)
MENU parentMenuID,parentMenuItem,,title$ CALL INSERTMENU(FN NEWMENU(childMenuID,""), -1)
END FN
在您调用 FN MakeHierMenu
之后,您可以使用 MENU
语句向层次菜单添加新项目(将 menuID
参数设置为 childMenuID
的值)。
Apple 菜单中的项目 您应该使用 APPLE MENU
语句在 Apple 菜单的顶部添加项目。在添加这些项目后,您可以使用 MENU
语句(将 menuID
参数设置为 _appleMenu
)来更改项目(例如,启用或变暗它们)。
帮助菜单中的项目 您可以通过获取帮助菜单的句柄,然后调用 AppendMenu
过程,在帮助菜单的底部添加项目。您还需要找出第一个帮助项目的项目编号,供菜单事件处理程序使用(任何现有项目都由帮助管理器处理)
DIM AS INT OSErr, @ firstCustomHelpItem
DIM AS HANDLE @ hmHandle
#IF carbonlib
OSErr = FN HMGETHELPMENU(hmHandle, firstCustomHelpItem)
#ELSE
OSErr = FN HMGETHELPMENUHANDLE(hmHandle)
firstCustomHelpItem = FN COUNTMITEMS(hmHandle)+1
#ENDIF
CALL APPENDMENU(hmHandle, "我的帮助")
在向帮助菜单添加项目后,您可以使用 MENU
语句(将 menuID
参数设置为 _kHMHelpMenuID
)来更改项目。
注意: 不要使用 MENU
语句向帮助菜单添加新项目;而应使用 AppendMenu
。
删除菜单 调用 DeleteMenu
过程删除由 MENU
语句创建的菜单
CALL DELETEMENU(menuID)
这可能会导致菜单栏中的其他菜单向左滑动以填补空白;但是,它们仍然保留其原始菜单 ID 编号。
删除菜单项 要删除您创建的菜单中的所有项目,请使用 MENU
语句,在 itemID
参数中指定零,并在 string$
参数中指定菜单标题。
要删除单个项目,请使用 GetMHandle
函数和 DelMenuItem
过程
CALL DELMENUITEM(FN GETMHANDLE(menuID), itemID)
请注意,这将重新编号已删除项目下方的任何项目,因为它们会向上移动以填补空白。菜单项编号始终从 1 开始连续编号。
示例: 以下行创建一个完整的菜单,其中还包含一个层次菜单。此示例使用上面定义的 MakeHierMenu
函数。
MENU 3,0,_enable,"游戏" MENU 3,1,_enable,"查看高分/H" MENU 3,2,_enable,"重置高分/R" MENU 3,3,_disable,"-" FN MakeHierMenu(3,4,"情景",100) '层次菜单中的项目: MENU 100,1,_checked,"级别 1" MENU 100,2,_enable,"级别 2" MENU 100,3,_enable,"级别 3" '需要两个 MENU 语句才能包含 '像“!”这样的特殊字符: MENU 3,5,_enable,"dummy" '这添加了项目 MENU 3,5,_enable,"立即玩!" '这改变了项目
IMAGE WAS HERE
上下文菜单 大约在外观管理器出现的时候,程序员开始使用上下文菜单。当用户按住 Control 键并在窗口的特定区域单击时,上下文菜单就会出现。当发生这种类型的操作时,您将收到(仅外观管理器运行时)一个 DIALOG(0)
消息 _cntxtMenuClick
。DIALOG(_cntxtMenuClick)
将是窗口的窗口编号。此时,您可能需要通过在光标下方显示菜单来做出反应。
IMAGE WAS HERE
以下函数构建并显示菜单,并可能在响应上下文菜单单击时被调用。
本地函数 DoContextMenu( wNum 作为 长整型 ) 声明 @ selectionType 作为 长整型 声明 @ menuID 作为 短整型 声明 @ menuItem 作为 短整型 声明 mHndl 作为 句柄 声明 err 作为 操作系统状态 声明 helpItemString 作为 字符串255 mHndl = 函数 NEWMENU(255, "X") 长整型 如果 mHndl 插入菜单( mHndl, -1 ) 追加菜单( mHndl, ¬ "上下文菜单单击窗口" + 字符串$( wNum ) ) helpItemString = "我的自定义帮助" err = 函数 CONTEXTUALMENUSELECT( mHndl, ¬ #gFBTheEvent.where, _nil, _kCMHelpItemNoHelp, ¬ @helpItemString, #_nil, @selectionType, ¬ @menuID, @menuItem ) /* 在这个函数中,我们实际上没有对返回的 selectionType、menuID 或 menuItem 做任何处理,但我们可以 在这里对它做出反应 */ 释放菜单( mHndl ) 结束 如果 结束 函数
菜单;菜单函数;ON MENU FN;苹果菜单;DEF CHECKONEITEM