Futurebasic/语言/参考/menu 语句
创建或更改菜单:MENU menuID, itemID, state [,string$]
取消突出显示菜单栏:MENU
2002年2月(第6版)
描述
使用此语句执行以下任何操作
- 向菜单栏添加新菜单。
- 启用或禁用菜单。
- 向现有菜单添加新项目。
- 启用或禁用菜单项。
- 向菜单项添加或移除复选标记。
- 更改菜单项的文本。
- 指定要附加到菜单项的分层子菜单
- 取消突出显示菜单栏。
向菜单栏添加新菜单
- 将
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$
中的所有字符都将显示在项目文本中,并且没有任何字符会被解释为元字符。此规则的例外情况是以减号开头的字符串。减号是大多数菜单定义用来绘制分隔线的标志。如果您的项目需要包含减号,则如果在字符前放置一个空格,您仍然可以正确显示该项目。
此处有图像
创建分层菜单 您可以使用以下函数添加新的菜单项并将其附加到新的分层菜单。您应该将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, "My Help")
添加项目到帮助菜单后,您可以使用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,"Game" MENU 3,1,_enable,"See High Scores/H" MENU 3,2,_enable,"Reset High Scores/R" MENU 3,3,_disable,"-" FN MakeHierMenu(3,4,"Scenarios",100) '分层菜单中的项目:MENU 100,1,_checked,"Level 1" MENU 100,2,_enable,"Level 2" MENU 100,3,_enable,"Level 3" '需要两个MENU语句才能在文本中包含'像"!"这样的特殊字符:MENU 3,5,_enable,"dummy" '这添加了项目 MENU 3,5,_enable,"Play Now!" '这改变了项目
此处有图像
上下文菜单 随着外观管理器(Appearance Manager)的出现,程序员开始使用上下文菜单。当用户在窗口的特定区域点击并按住控制键时,就会出现上下文菜单。当发生此类操作时,您将收到(仅限外观管理器运行时)DIALOG(0)
消息 _cntxtMenuClick
。DIALOG(_cntxtMenuClick)
将是窗口的窗口号。此时,您可能需要通过在光标下显示菜单来做出反应。
此处有图像
以下函数构建并显示一个菜单,并且可以在响应上下文菜单点击时调用。
LOCAL FN DoContextMenu( wNum as long ) DIM @ selectionType AS LONG DIM @ menuID AS SHORT DIM @ menuItem AS SHORT DIM mHndl AS HANDLE DIM err AS OSSTATUS DIM helpItemString AS STR255 mHndl = FN NEWMENU(255, "X") LONG IF mHndl INSERTMENU( mHndl, -1 ) APPENDMENU( mHndl, ¬ "ContextualMenu click in window" + str$( wNum ) ) helpItemString = "My Custom Help" err = FN CONTEXTUALMENUSELECT( mHndl, ¬ #gFBTheEvent.where, _nil, _kCMHelpItemNoHelp, ¬ @helpItemString, #_nil, @selectionType, ¬ @menuID, @menuItem ) /* 在此函数中,我们实际上并没有对返回的 selectionType、menuID 或 menuItem 进行任何操作,但我们 可以在此处对其做出反应 */ DISPOSEMENU( mHndl ) END IF END FN
MENU;MENU 函数;ON MENU FN;APPLE MENU;DEF CHECKONEITEM