CONTEXTMENUITEM 結構 (mmc.h)
CONTEXTMENUITEM 結構會傳遞至 IContextMenuCallback::AddItem 方法或 IContextMenuProvider::AddItem 方法, (繼承自 IContextMenuCallback) ,以定義新的功能表項、子功能表或插入點。 操作功能表是從根目錄建置,每個新項目都會移至插入子功能表或插入點的結尾。
語法
typedef struct _CONTEXTMENUITEM {
LPWSTR strName;
LPWSTR strStatusBarText;
LONG lCommandID;
LONG lInsertionPointID;
LONG fFlags;
LONG fSpecialFlags;
} CONTEXTMENUITEM;
成員
strName
包含功能表項名稱或子選單之 Null 終止字串的指標。 除了分隔符或插入點之外,這個成員不能是 NULL 。
strStatusBarText
Null 終止字串的指標,其中包含醒目提示此項目時顯示在狀態列中的文字。 此成員可以是 NULL。
lCommandID
值,指定功能表項的命令標識碼。 如果 IExtendContextMenu::AddMenuItems 新增此功能表項,然後選取,這是傳回 IExtendContextMenu::Command 的命令標識符。 如果 IContextMenuProvider 介面新增此功能表項,然後選取,這是傳回給 IContextMenuProvider::ShowContextMenu 所選取的命令標識符。 如果這是在 fSpecialFlags) 中設定插入點 (CCM_SPECIAL_INSERTION_POINT,或在 fFlags) 中設定子功能表 (MF_POPUP,請在後續呼叫中使用 lCommandID 作為 lInsertionPointID (,請參閱下列清單) 。 請仔細閱讀下列討論,因為新插入點標識碼中的特定位必須開啟,而其他位必須關閉。
命令標識碼中的某些位需要特殊處理不是插入點或子功能表的專案。
CCM_COMMANDID_MASK_RESERVED = 0xFFFF0000
設定這些位時,無法新增插入點和子功能表以外的專案。
插入點標識碼中的某些位需要特別處理 (fSpecialFlags和 CCM_SPECIAL_INSERTION_POINT) 或子功能表的專案, (fFlags 和 MF_POPUP) 。
CCM_INSERTIONPOINTID_MASK_SPECIAL = 0xFFFF0000
特殊行為。 嵌入式管理單元可以視需要使用其他位。
CCM_INSERTIONPOINTID_MASK_SHARED = 0x80000000
這些插入點和子功能表會在操作功能表的建立者、主要延伸模組和第三方延伸模組之間共用。 新增至共用插入點或子功能表的專案可供操作功能表、主要延伸模組和第三方延伸模組的建立者使用。
如果未設定此位, IContextMenuProvider 介面和每個延伸模組都可以使用相同的標識符。 每個標識碼都參考不同的插入點或子功能表。
只有操作功能表建立者和主要嵌入式管理單元可以建立共用插入點或子功能表。
CCM_INSERTIONPOINTID_MASK_CREATE_PRIMARY = 0x40000000
此位必須設定為主要嵌入式管理單元所建立的共用插入點和子功能表,而不是針對操作功能表建立者所建立的插入點和子功能表進行設定。 這可防止共用插入點和子功能表的兩個來源之間的標識符衝突。
CCM_INSERTIONPOINTID_MASK_ADD_PRIMARY = 0x20000000
允許主要嵌入式管理單元將專案新增至共用插入點或子功能表。
CCM_INSERTIONPOINTID_MASK_ADD_3RDPARTY = 0x10000000
允許延伸模組嵌入式管理單元將專案新增至共用插入點或子功能表。
CCM_INSERTIONPOINTID_MASK_RESERVED = 0x0FFF0000
插入點或子功能表無法加入任何這些位集。
lInsertionPointID
值,指定應該在操作功能表中新增專案的位置。 嵌入式管理單元只能將專案新增至功能表建立者或主要嵌入式管理單元所建立的插入點。 以下是 MMC 在範圍窗格和清單檢視結果窗格之項目的預設操作選單中所建立的插入點:
0 (零)
零的 lInsertionPointID 是指此操作功能表的根功能表。 零可以與 CCM_INSERTIONPOINTID_ROOT_MENU交替使用。 請注意,只有 IContextMenuProvider 介面可以直接將專案新增至根功能表。 延伸模組只能透過 IContextMenuProvider 或 MMC,將專案新增至插入點和子功能表。
CCM_INSERTIONPOINTID_PRIMARY_TOP = 0xA0000000
主要嵌入式管理單元可以使用這個插入點,將專案新增至主操作功能表的頂端。
CCM_INSERTIONPOINTID_PRIMARY_NEW = 0xA0000001
主要嵌入式管理單元可以使用這個插入點,將專案新增至 [新增] 子功能表的頂端。 [新增] 子功能表可在範圍窗格和結果窗格中的內容功能表中使用。
CCM_INSERTIONPOINTID_PRIMARY_TASK = 0xA0000002
主要嵌入式管理單元可以使用這個插入點,將專案新增至 [所有工作] 子功能表的頂端。 [所有工作] 子功能表可在範圍窗格和結果窗格中的內容功能表中使用。
CCM_INSERTIONPOINTID_PRIMARY_VIEW = 0xA0000003
主要嵌入式管理單元可以使用這個插入點,將專案新增至 [ 檢視 ] 下拉功能表。 如果使用者單擊工具列中的 [ 檢視 ] 功能表,則會出現此插入點,但 [新增] 和 [所有工作] 插入點不會出現。
CCM_INSERTIONPOINTID_3RDPARTY_NEW = 0x90000001
延伸模組嵌入式管理單元可以使用這個插入點,將專案新增至 [新增] 子功能表底部。 [新增] 子功能表僅適用於範圍窗格中的內容功能表,而不適用於結果窗格中的內容功能表。
CCM_INSERTIONPOINTID_3RDPARTY_TASK = 0x90000002
擴充功能嵌入式管理單元可以使用這個插入點,將專案新增至 [所有工作] 子功能表的底部。
CCM_INSERTIONPOINTID_ROOT_MENU = 0x80000000
IContextMenuProvider 介面可以使用這個插入點,將專案新增至根功能表。
除了 IContextMenuProvider 新增的插入點以外,主要延伸模組和第三方延伸模組都無法新增專案至根功能表。
fFlags
值,指定下列一或多個樣式旗標:
MF_POPUP
值,指定這是操作功能表內的子功能表。 您可以使用其 lCommandID 做為其 lInsertionPointID,將功能表項、插入點和進一步子功能表新增至這個子功能表。
MF_BITMAP
MF_OWNERDRAW
不支持這些旗標,而且會導致 IContextMenuCallback::AddItem 傳回 E_INVALIDARG。
MF_SEPARATOR
繪製水準分隔線。
只有 IContextMenuProvider 介面可以新增 MF_SEPARATOR 設定的功能表項。
下列旗標的運作方式與 Windows API 中的旗標相同:
MF_CHECKED
選取功能表項。
MF_DISABLED
停用功能表項,使其無法選取,但旗標不會呈現灰色。
MF_ENABLED
啟用功能表項,使其可以選取,並從灰色狀態還原。
MF_GRAYED
停用功能表項,使其呈現灰色,因此無法選取它。
MF_MENUBARBREAK
與功能表欄 的MF_MENUBREAK 旗標相同。 對於下拉功能表、子功能表或快捷方式功能表,新數據行會以垂直線分隔舊數據行。
MF_MENUBREAK
Places 功能表欄的新行 (專案) ,或在下拉功能表、子功能表或快捷功能表 (的新數據行) (,而不分隔數據行。
MF_UNCHECKED
不會選取預設) (專案。
下列旗標群組無法一起使用:
- MF_DISABLED、 MF_ENABLED和 MF_GRAYED
- MF_MENUBARBREAK 和 MF_MENUBREAK
- MF_CHECKED 和 MF_UNCHECKED
fSpecialFlags
值,指定下列一或多個旗標:
CCM_SPECIAL_SEPARATOR = 0x0001
忽略 lInsertionPointID 以外的所有其他參數。 將分隔符新增至功能表結尾,或在指定的插入點上。 不會顯示位於功能表或子選單頂端或底部的分隔符。 沒有功能表項的分隔符將會折疊成單一分隔符。
只有 IContextMenuProvider 介面可以新增分隔符、特殊或其他方式。
CCM_SPECIAL_SUBMENU = 0x0002
如果這個子功能表是空的,則會呈現灰色並停用。 這隻適用於 MF_POPUP 專案。
CCM_SPECIAL_DEFAULT_ITEM = 0x0004
默認功能表項。 如果有多個功能表項指定此旗標,則每個子功能表中的最後一個專案會優先使用。
CCM_SPECIAL_INSERTION_POINT = 0x0008
忽略 lCommandID 和 lInsertionPointID 以外的所有其他參數。 這會在 lInsertionPointID 所識別的插入點或子功能表結尾建立新的插入點。
後續呼叫可以使用來自此呼叫的 lCommandID 參數做為其 lInsertionPointID,並在功能表中插入自己的功能表項、子功能表或插入點。
CCM_SPECIAL_TESTONLY = 0x0010
驗證項目參數,但不要新增功能表項。 傳回結果碼,指出新增是否成功。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista |
最低支援的伺服器 | Windows Server 2008 |
標頭 | mmc.h |