IContextMenu::QueryContextMenu 方法 (shobjidl_core.h)
將命令新增至快捷方式功能表。
語法
HRESULT QueryContextMenu(
HMENU hmenu,
UINT indexMenu,
UINT idCmdFirst,
UINT idCmdLast,
UINT uFlags
);
參數
hmenu
類型: HMENU
快捷功能表的句柄。 處理程序應該會在新增功能表項時指定此句柄。
indexMenu
類型: UINT
要插入第一個新功能表項之以零起始的位置。
idCmdFirst
類型: UINT
處理程式可以針對功能表項識別元指定的最小值。
idCmdLast
類型: UINT
處理程式可以針對功能表項識別元指定的最大值。
uFlags
類型: UINT
選擇性旗標,指定如何變更快捷方式功能表。 這個參數可以設定為下列值的組合。 系統會保留低序字的其餘位。 高序字可用於內容特定的通訊。 CMF_RESERVED值可用來遮罩低序字組。
CMF_NORMAL (0x00000000)
0x00000000。 表示正常作業。 快捷方式功能延伸模組、命名空間延伸模組或拖放處理程式可以新增所有功能表項。
CMF_DEFAULTONLY (0x00000001)
0x00000001。 使用者正在啟動默認動作,通常是按兩下。 如果快捷方式功能表延伸模組未修改功能表中的預設專案,此旗標會提供提示,以新增任何內容。 如果指定此值,快捷功能表延伸模組或拖放處理程式不應該新增任何功能表項。 命名空間延伸應該最多只新增預設專案。
CMF_VERBSONLY (0x00000002)
0x00000002。 快捷方式功能表是快捷鍵檔案 (通常是.lnk檔案) 。 快捷方式功能表處理程序應該忽略此值。
CMF_EXPLORE (0x00000004)
0x00000004。 [Windows 檔案總管] 樹狀結構視窗存在。
CMF_NOVERBS (0x00000008)
0x00000008。 此旗標是針對 [ 傳送至 ] 功能表中顯示的項目所設定。 快捷方式功能表處理程序應該忽略此值。
CMF_CANRENAME (0x00000010)
0x00000010。 呼叫的應用程式支援重新命名專案。 快捷方式功能表或拖放處理程序應該忽略此旗標。 如果適用,命名空間延伸模組應該將 [重新命名 ] 專案新增至功能表。
CMF_NODEFAULT (0x00000020)
0x00000020。 功能表中沒有任何項目已設定為預設值。 拖放處理程序應該忽略此旗標。 命名空間延伸不應該將任何功能表項設定為預設值。
CMF_INCLUDESTATIC (0x00000040)
這個值無法使用。
Windows Server 2003 和 Windows XP: 0x00000040。 正在建構靜態功能表。 只有瀏覽器應該使用此旗標;所有其他快捷方式功能表延伸模組都應該忽略它。
CMF_ITEMMENU (0x00000080)
0x00000080。 呼叫的應用程式會叫用檢視 (中專案上的快捷方式功能表,而不是檢視) 的背景。
Windows Server 2003 和 Windows XP: 這個值無法使用。
CMF_EXTENDEDVERBS (0x00000100)
0x00000100。 呼叫端應用程式想要擴充動詞。 當使用者以滑鼠右鍵按兩下物件時,會顯示一般動詞。 若要顯示擴充動詞,用戶必須在按下 Shift 鍵時按下滑鼠右鍵。
CMF_DISABLEDVERBS (0x00000200)
0x00000200。 呼叫端應用程式想要叫用已停用的動詞命令,例如舊版功能表。
Windows Server 2003 和 Windows XP: 這個值無法使用。
CMF_ASYNCVERBSTATE (0x00000400)
0x00000400。 動詞狀態可以異步評估。
Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 這個值無法使用。
CMF_OPTIMIZEFORINVOKE (0x00000800)
0x00000800。 通知操作功能表處理程式,不支援透過標準動詞名稱叫用動詞,以略過其實作中的 IContextMenu::QueryContextMenu 。
Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 這個值無法使用。
CMF_SYNCCASCADEMENU (0x00001000)
0x00001000。 同步填入子功能表。
Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 這個值無法使用。
CMF_DONOTPICKDEFAULT (0x00002000)
0x00002000。 如果未明確指定動詞,請勿在其位置使用默認動詞。
Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 這個值無法使用。
CMF_RESERVED (0xffff0000)
0xffff0000。 這個旗標是位掩碼,指定不應該使用的所有位。 這只能當做遮罩使用。 請勿將此傳遞為參數值。
傳回值
類型: HRESULT
如果成功,則會傳回其嚴重性值設定為 SEVERITY_SUCCESS 的 HRESULT 值,並將其程式代碼值設定為指派的最大命令標識符位移,再加上一個。 例如,如果 idCmdFirst 設定為 5,並將三個專案新增至命令標識碼為 5、7 和 8 的功能表,則傳回值應該MAKE_HRESULT (SEVERITY_SUCCESS、0、8 - 5 + 1) 。 否則,它會傳回 COM 錯誤值。
備註
這個方法應該呼叫 InsertMenu 或 InsertMenuItem ,將其功能表項插入 hmenu 所指定的功能表中。 indexMenu 參數會保留要用於第一個功能表項的索引。 每個功能表項的標識碼必須落在 idCmdFirst 和 idCmdLast 所定義的範圍內。
常見的作法是將第一個命令標識符設定為 idCmdFirst (零) 位移,並將每個額外命令的位移遞增一個。 此做法可確保您不會超過 idCmdLast ,並保留可供其他處理程式使用的標識碼範圍。 儲存參考的位移,因為它們可用來在後續對IContextMenu::GetCommandString 和 IContextMenu::InvokeCommand 的呼叫中識別命令。
如果 Shell 接著呼叫另一個快捷方式功能表處理程式,它會在呼叫該處理程式的 QueryContextMenu 方法時,使用傳回之 HRESULT 的程式代碼值來設定 idCmdFirst。
當操作功能表處理程式新增快捷功能表項時,它必須使用 IContextMenu::QueryContextMenu 將至少一個專案新增至該功能表,才能轉送WM_INITMENUPOPUP訊息。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | shobjidl_core.h (包括 Shobjidl.h) |
Dll | Shell32.dll (4.0 版或更新版本) |