檢視原始碼 wxMenu (wx v2.4.3)
選單是一個彈出式(或下拉式)的項目列表,在選單消失之前(點擊其他地方會關閉選單)可以從中選擇一個項目。
選單可以用於建立選單列或彈出式選單。
選單項目具有與之關聯的整數 ID,可以用於識別所選項目,或以某種方式變更選單項目。具有特殊識別碼 wxID_SEPARATOR
的選單項目是分隔項目,沒有關聯的指令,只會在選單中顯示分隔線。
注意:請注意,wxID_ABOUT
和 wxID_EXIT
是 wxWidgets 預先定義的,並且具有特殊含義,因為使用這些 ID 的項目會從 macOS 下的正常選單中取出,並插入到系統選單中(遵循適當的 macOS 介面指南)。
選單項目可以是 normal
項目、check
項目或 radio
項目。普通項目沒有任何特殊屬性,而勾選項目具有與之關聯的布林值標誌,並且在設定標誌時會在選單中顯示勾選記號。當點擊項目時,wxWidgets 會自動切換標誌值,並且可以使用 isChecked/2
方法的 wxMenu
或 wxMenuBar
本身,或在您收到該項目的選單通知時使用 wxEvent::IsChecked 來檢索其值。
單選項目類似於勾選項目,不同之處在於,當勾選單選項目時,同一單選群組中的所有其他項目都會取消勾選。單選群組由連續的單選項目範圍形成,也就是說,它從第一個此類項目開始,到第一個不同種類的項目結束(或到選單的末尾)。請注意,由於單選群組是根據項目位置定義的,因此在包含單選項目的選單中插入或移除項目可能會導致無法正常運作。
配置策略
所有選單都必須在 heap
上建立,因為附加到選單列或另一個選單的所有選單都會在其父選單被刪除時被刪除。此規則的唯一例外是彈出式選單(即與 wxWindow:popupMenu/4
一起使用的選單),因為 wxWidgets 不會銷毀它們,以允許重複使用相同的選單多次。但例外情況僅適用於選單本身,而不適用於彈出式選單的任何子選單,子選單仍會像往常一樣被 wxWidgets 銷毀,因此必須在堆疊上配置。
由於框架選單列是由框架本身刪除的,這表示通常使用的所有選單都會自動刪除。
事件處理
可以使用 wxEvtHandler::Bind()
(在 wx 中未實作)將選單項目產生的命令的事件處理常式直接連接到選單物件本身。如果此選單是另一個選單的子選單,則其項目的事件也可以在父選單中處理,依此類推,以遞迴方式處理。
如果選單是選單列的一部分,則事件也可以在 wxMenuBar
物件中處理。
最後,選單事件也可以在相關聯的視窗中處理,該視窗可以是與此選單所屬的選單列相關聯的 wxFrame
,或者是針對彈出式選單呼叫 wxWindow:popupMenu/4
的視窗。
請參閱 overview_events_bind,瞭解如何將事件處理常式繫結到各種物件。
請參閱
此類別衍生自 wxEvtHandler,並且可以使用其中的函式
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().
設定項目的說明字串。
請參閱:getHelpString/2
-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