共用方式為


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 錯誤值。

備註

這個方法應該呼叫 InsertMenuInsertMenuItem ,將其功能表項插入 hmenu 所指定的功能表中。 indexMenu 參數會保留要用於第一個功能表項的索引。 每個功能表項的標識碼必須落在 idCmdFirstidCmdLast 所定義的範圍內。

常見的作法是將第一個命令標識符設定為 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 版或更新版本)