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