查看源代码 wxMenu (wx v2.4.3)
菜单是一个弹出式(或下拉式)的项目列表,在菜单消失之前(点击其他地方会关闭菜单)可以从中选择一个项目。
菜单可以用来构建菜单栏或弹出菜单。
一个菜单项有一个与之关联的整数 ID,可以用来识别选择,或者以某种方式更改菜单项。一个具有特殊标识符 wxID_SEPARATOR
的菜单项是一个分隔符项,没有关联的命令,只是在菜单中显示一条分隔线。
注意:请注意 wxID_ABOUT
和 wxID_EXIT
是 wxWidgets 预定义的,并且具有特殊含义,因为使用这些 ID 的条目将从 macOS 下的普通菜单中取出,并插入到系统菜单中(遵循适当的 macOS 界面指南)。
菜单项可以是 normal
项,check
项或 radio
项。普通项没有任何特殊属性,而 check 项有一个与之关联的布尔标志,并且当标志被设置时,会在菜单中显示一个复选标记。当点击该项时,wxWidgets 会自动切换标志值,并且可以使用 isChecked/2
方法(位于 wxMenu
或 wxMenuBar
中)或使用 wxEvent::IsChecked (当您收到该项的菜单通知时)来检索该值。
单选项目与复选项目类似,只是当选中一个单选项目时,同一单选组中的所有其他项目都会被取消选中。单选组由连续的单选项目范围形成,即从第一个此类项目开始,到第一个不同类型的项目结束(或菜单的末尾)。请注意,由于单选组是根据项目位置定义的,因此在包含单选项目的菜单中插入或删除项目可能会导致无法正常工作。
分配策略
所有菜单都必须在 堆
上创建,因为附加到菜单栏或另一个菜单的所有菜单都将在其父菜单被删除时被删除。此规则的唯一例外是弹出菜单(即与 wxWindow:popupMenu/4
一起使用的菜单),因为 wxWidgets 不会销毁它们以允许多次重复使用相同的菜单。但是,该例外仅适用于菜单本身,而不适用于弹出菜单的任何子菜单,这些子菜单仍然像往常一样被 wxWidgets 销毁,因此必须在堆上分配。
由于框架菜单栏由框架本身删除,这意味着通常所有使用的菜单都会被自动删除。
事件处理
可以使用 wxEvtHandler::Bind()
(在 wx 中未实现)将菜单项生成的命令的事件处理程序直接连接到菜单对象本身。如果此菜单是另一个菜单的子菜单,则其项目的事件也可以在父菜单中处理,依此类推,递归地处理。
如果菜单是菜单栏的一部分,则事件也可以在 wxMenuBar
对象中处理。
最后,菜单事件也可以在关联的窗口中处理,该窗口可以是与此菜单所属的菜单栏关联的 wxFrame
,也可以是为弹出菜单调用 wxWindow:popupMenu/4
的窗口。
请参阅 overview_events_bind,了解如何将事件处理程序绑定到各种对象。
请参阅
此类派生自以下类,并且可以使用其函数:
wxWidgets 文档:wxMenu
摘要
函数
添加一个菜单项对象。
添加一个菜单项。
添加一个子菜单。
将一个可复选的项目添加到菜单的末尾。
将一个单选项目添加到菜单的末尾。
在菜单的末尾添加一个分隔符。
在菜单中插入一个中断,导致下一个附加的项目出现在新列中。
选中或取消选中菜单项。
从菜单中删除菜单项。
从菜单中删除菜单项。
销毁对象
启用或禁用(灰显)菜单项。
查找菜单项字符串的菜单 ID。
返回给定菜单位置的 wxMenuItem
。
返回与菜单项关联的帮助字符串。
返回菜单项标签。
返回菜单中的项目数。
返回菜单的标题。
在位置 pos
之前插入给定的 item
。
在位置 pos
之前插入给定的 item
。
在位置 pos
之前插入给定的 submenu
。
在给定位置插入一个可复选的项目。
在给定位置插入一个单选项目。
在给定位置插入一个分隔符。
确定是否选中菜单项。
确定是否启用菜单项。
构造一个 wxMenu
对象。
构造一个带有标题的 wxMenu
对象。
在位置 0 处(即在所有其他现有项目之前)插入给定的 item
。
在位置 0 处(即在所有其他现有项目之前)插入给定的 item
。
在位置 0 处插入给定的 submenu
。
在位置 0 处插入一个可复选的项目。
在位置 0 处插入一个单选项目。
在位置 0 处插入一个分隔符。
从菜单中删除菜单项,但不删除关联的 C++ 对象。
设置项目的帮助字符串。
设置菜单项的标签。
设置菜单的标题。
类型
-type wxMenu() :: wx:wx_object().
函数
-spec append(This, MenuItem) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), MenuItem :: wxMenuItem:wxMenuItem().
添加一个菜单项对象。
这是 append/5
方法最通用的变体,因为它可以用于项目(包括分隔符)和子菜单,并且您还可以通过这种方式指定菜单项的各种额外属性,例如位图和字体。
备注:请参阅其他 append/5
重载的备注。
请参阅
-spec append(This, Id, Item) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Item :: unicode:chardata().
-spec append(This, Id, Item, SubMenu) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Item :: unicode:chardata(), SubMenu :: wxMenu(); (This, Id, Item, [Option]) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Item :: unicode:chardata(), Option :: {help, unicode:chardata()} | {kind, wx:wx_enum()}.
添加一个菜单项。
示例:或者对于库存菜单项更好(请参阅 wxMenuItem:new/1
)
备注:此命令可以在菜单显示后使用,也可以在初始创建菜单或菜单栏时使用。
请参阅
-spec append(This, Id, Item, SubMenu, [Option]) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Item :: unicode:chardata(), SubMenu :: wxMenu(), Option :: {help, unicode:chardata()}.
添加一个子菜单。
已弃用
此函数已弃用,请改用 AppendSubMenu()
(在 wx 中未实现)。
请参阅
-spec appendCheckItem(This, Id, Item) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Item :: unicode:chardata().
-spec appendCheckItem(This, Id, Item, [Option]) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Item :: unicode:chardata(), Option :: {help, unicode:chardata()}.
将一个可复选的项目添加到菜单的末尾。
请参阅
-spec appendRadioItem(This, Id, Item) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Item :: unicode:chardata().
-spec appendRadioItem(This, Id, Item, [Option]) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Item :: unicode:chardata(), Option :: {help, unicode:chardata()}.
将一个单选项目添加到菜单的末尾。
所有连续的单选项目形成一个组,当选中组中的一个项目时,所有其他项目都会自动取消选中。
注意:wxMotif 下不支持单选项目。
请参阅
-spec appendSeparator(This) -> wxMenuItem:wxMenuItem() when This :: wxMenu().
在菜单的末尾添加一个分隔符。
请参阅
-spec break(This) -> ok when This :: wxMenu().
在菜单中插入一个中断,导致下一个附加的项目出现在新列中。
此函数实际上只在 wxMSW 中插入一个中断,而在其他平台下不执行任何操作。
选中或取消选中菜单项。
请参阅:isChecked/2
-spec 'Destroy'(This, Id) -> boolean() when This :: wxMenu(), Id :: integer(); (This, Item) -> boolean() when This :: wxMenu(), Item :: wxMenuItem:wxMenuItem().
从菜单中删除菜单项。
如果该项目是子菜单,它将被删除。如果要保留子菜单(例如,以后重用),请使用 remove/2
。
请参阅
-spec delete(This, Id) -> boolean() when This :: wxMenu(), Id :: integer(); (This, Item) -> boolean() when This :: wxMenu(), Item :: wxMenuItem:wxMenuItem().
从菜单中删除菜单项。
如果该项目是子菜单,它将不会
被删除。如果要删除子菜单,请使用 'Destroy'/2
。
请参阅
-spec destroy(This :: wxMenu()) -> ok.
销毁对象
启用或禁用(灰显)菜单项。
请参阅:isEnabled/2
-spec findItem(This, Id) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(); (This, ItemString) -> integer() when This :: wxMenu(), ItemString :: unicode:chardata().
查找菜单项字符串的菜单 ID。
返回:菜单项标识符,如果未找到,则返回 wxNOT_FOUND。
备注:任何特殊的菜单代码都会在匹配之前从源字符串和目标字符串中删除。
-spec findItemByPosition(This, Position) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Position :: integer().
返回给定菜单位置的 wxMenuItem
。
-spec getHelpString(This, Id) -> unicode:charlist() when This :: wxMenu(), Id :: integer().
返回与菜单项关联的帮助字符串。
返回:帮助字符串,如果不存在帮助字符串或未找到该项,则返回空字符串。
请参阅
-spec getLabel(This, Id) -> unicode:charlist() when This :: wxMenu(), Id :: integer().
返回菜单项标签。
返回:项目标签,如果未找到该项,则返回空字符串。
请参阅:setLabel/3
返回菜单中的项目数。
-spec getMenuItems(This) -> [wxMenuItem:wxMenuItem()] when This :: wxMenu().
-spec getTitle(This) -> unicode:charlist() when This :: wxMenu().
返回菜单的标题。
请参阅:setTitle/2
-spec insert(This, Pos, Id) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Pos :: integer(), Id :: integer(); (This, Pos, MenuItem) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Pos :: integer(), MenuItem :: wxMenuItem:wxMenuItem().
在位置 pos
之前插入给定的 item
。
在位置 getMenuItemCount/1
处插入项目与附加项目相同。
请参阅
-spec insert(This, Pos, Id, [Option]) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Pos :: integer(), Id :: integer(), Option :: {text, unicode:chardata()} | {help, unicode:chardata()} | {kind, wx:wx_enum()}.
在位置 pos
之前插入给定的 item
。
在位置 getMenuItemCount/1
处插入项目与附加项目相同。
请参阅
-spec insert(This, Pos, Id, Text, Submenu) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Pos :: integer(), Id :: integer(), Text :: unicode:chardata(), Submenu :: wxMenu().
-spec insert(This, Pos, Id, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Pos :: integer(), Id :: integer(), Text :: unicode:chardata(), Submenu :: wxMenu(), Option :: {help, unicode:chardata()}.
在位置 pos
之前插入给定的 submenu
。
text
是菜单中显示的文本,help
是当选择子菜单项时在状态栏中显示的帮助字符串。
请参阅:prepend/5
-spec insertCheckItem(This, Pos, Id, Item) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Pos :: integer(), Id :: integer(), Item :: unicode:chardata().
-spec insertCheckItem(This, Pos, Id, Item, [Option]) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Pos :: integer(), Id :: integer(), Item :: unicode:chardata(), Option :: {help, unicode:chardata()}.
在给定位置插入一个可复选的项目。
请参阅
-spec insertRadioItem(This, Pos, Id, Item) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Pos :: integer(), Id :: integer(), Item :: unicode:chardata().
-spec insertRadioItem(This, Pos, Id, Item, [Option]) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Pos :: integer(), Id :: integer(), Item :: unicode:chardata(), Option :: {help, unicode:chardata()}.
在给定位置插入一个单选项目。
请参阅
-spec insertSeparator(This, Pos) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Pos :: integer().
在给定位置插入一个分隔符。
请参阅
确定是否选中菜单项。
返回:如果菜单项被选中,则返回 true,否则返回 false。
请参阅:check/3
确定是否启用菜单项。
返回:如果菜单项已启用,则返回 true,否则返回 false。
请参阅:enable/3
-spec new() -> wxMenu().
构造一个 wxMenu
对象。
构造一个 wxMenu
对象。
-spec new(Title, [Option]) -> wxMenu() when Title :: unicode:chardata(), Option :: {style, integer()}.
构造一个带有标题的 wxMenu
对象。
-spec prepend(This, Id) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(); (This, Item) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Item :: wxMenuItem:wxMenuItem().
在位置 0 处(即在所有其他现有项目之前)插入给定的 item
。
请参阅
-spec prepend(This, Id, [Option]) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Option :: {text, unicode:chardata()} | {help, unicode:chardata()} | {kind, wx:wx_enum()}.
在位置 0 处(即在所有其他现有项目之前)插入给定的 item
。
请参阅
-spec prepend(This, Id, Text, Submenu) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Text :: unicode:chardata(), Submenu :: wxMenu().
-spec prepend(This, Id, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Text :: unicode:chardata(), Submenu :: wxMenu(), Option :: {help, unicode:chardata()}.
在位置 0 处插入给定的 submenu
。
请参阅:insert/6
-spec prependCheckItem(This, Id, Item) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Item :: unicode:chardata().
-spec prependCheckItem(This, Id, Item, [Option]) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Item :: unicode:chardata(), Option :: {help, unicode:chardata()}.
在位置 0 处插入一个可复选的项目。
请参阅
-spec prependRadioItem(This, Id, Item) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Item :: unicode:chardata().
-spec prependRadioItem(This, Id, Item, [Option]) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(), Item :: unicode:chardata(), Option :: {help, unicode:chardata()}.
在位置 0 处插入一个单选项目。
请参阅
-spec prependSeparator(This) -> wxMenuItem:wxMenuItem() when This :: wxMenu().
在位置 0 处插入一个分隔符。
请参阅
-spec remove(This, Id) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Id :: integer(); (This, Item) -> wxMenuItem:wxMenuItem() when This :: wxMenu(), Item :: wxMenuItem:wxMenuItem().
从菜单中删除菜单项,但不删除关联的 C++ 对象。
这允许您稍后通过将其添加回菜单来重用同一项目(对于子菜单尤其有用)。
返回值:指向从菜单中分离出来的项目的指针。
-spec setHelpString(This, Id, HelpString) -> ok when This :: wxMenu(), Id :: integer(), HelpString :: unicode:chardata().
设置项目的帮助字符串。
-spec setLabel(This, Id, Label) -> ok when This :: wxMenu(), Id :: integer(), Label :: unicode:chardata().
设置菜单项的标签。
请参阅
-spec setTitle(This, Title) -> ok when This :: wxMenu(), Title :: unicode:chardata().
设置菜单的标题。
备注:请注意,您只能直接为弹出菜单调用此方法。要更改菜单栏中某个菜单的标题,您需要使用 wxMenuBar:setLabelTop/3
。
参见:getTitle/1