跳转到内容

Futurebasic/Language/Reference/menu 语句

来自维基教科书,自由的教学材料

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

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

  • 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$ 中的所有字符都将出现在项目文本中,并且没有字符会被解释为元字符。此规则的例外情况是以减号开头的字符串。减号是大多数菜单定义用来绘制分隔线的标志。如果您的项目需要包含减号,您可以通过在字符前放置一个空格来正确显示项目。

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) 消息 _cntxtMenuClickDIALOG(_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

华夏公益教科书