跳转到内容

Futurebasic/语言/参考/menu 语句

来自 Wikibooks,开放世界中的开放书籍

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$中的某些特殊字符不会显示在项目文本中,但具有其他特殊含义。请参阅下面的“元字符”表。

启用、禁用(变暗)或选中现有项目

  • menuIDitemID参数设置为现有菜单中的现有项目。
  • state参数设置为_enable_disable_checked。请注意,将 state 设置为_enable_disable将删除项目上任何现有的复选标记。

更改现有项目的文本

  • menuIDitemID参数设置为现有菜单中的现有项目。
  • 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) 消息 _cntxtMenuClickDIALOG(_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

华夏公益教科书