TrackPopupMenuEx 函式 (winuser.h)

在指定的位置顯示快捷方式功能表,並追蹤快捷方式功能表上的項目選取範圍。 快捷功能表可以出現在畫面上的任何位置。

語法

BOOL TrackPopupMenuEx(
  [in]           HMENU       hMenu,
  [in]           UINT        uFlags,
  [in]           int         x,
  [in]           int         y,
  [in]           HWND        hwnd,
  [in, optional] LPTPMPARAMS lptpm
);

參數

[in] hMenu

類型: HMENU

要顯示的快捷方式功能表句柄。 您可以藉由呼叫 CreatePopupMenu 函式來建立新的快捷方式功能表,或呼叫 GetSubMenu 函式來擷取與現有功能表項相關聯的子功能表句柄來取得此句柄。

[in] uFlags

類型: UINT

指定函式選項。

使用下列其中一個旗標來指定函式如何水準定位快捷方式功能表。

意義
TPM_CENTERALIGN
0x0004L
將快捷方式功能表水準置中,相對於 x 參數所指定的座標。
TPM_LEFTALIGN
0x0000L
放置快捷方式功能表,使其左側對齊 x 參數所指定的座標。
TPM_RIGHTALIGN
0x0008L
放置快捷方式功能表,使其右側對齊 x 參數所指定的座標。
 

使用下列其中一個旗標來指定函式如何垂直放置快捷方式功能表。

意義
TPM_BOTTOMALIGN
0x0020L
放置快捷方式功能表,使其底部對齊 y 參數所指定的座標。
TPM_TOPALIGN
0x0000L
放置快捷方式功能表,使其頂端對齊 y 參數所指定的座標。
TPM_VCENTERALIGN
0x0010L
將快捷方式功能表垂直置中,相對於 y 參數所指定的座標。
 

使用下列旗標來控制用戶選取專案的探索,而不需要設定功能表的父視窗。

意義
TPM_NONOTIFY
0x0080L
當使用者單擊功能表項時,函式不會傳送通知訊息。
TPM_RETURNCMD
0x0100L
函式會傳回傳回值中用戶選取範圍的功能表項標識碼。
 

使用下列其中一個旗標來指定快捷功能表追蹤的滑鼠按鈕。

意義
TPM_LEFTBUTTON
0x0000L
用戶可以只選取滑鼠左鍵的功能表項。
TPM_RIGHTBUTTON
0x0002L
用戶可以同時選取具有滑鼠左鍵和右鍵的功能表項。
 

使用下列旗標的任何合理組合來修改功能表的動畫。 例如,藉由選取水準和垂直旗標,即可達成對角動畫。

意義
TPM_HORNEGANIMATION
0x0800L
以動畫顯示從右至左的功能表。
TPM_HORPOSANIMATION
0x0400L
以動畫顯示從左至右的功能表。
TPM_NOANIMATION
0x4000L
顯示沒有動畫的功能表。
TPM_VERNEGANIMATION
0x2000L
以動畫顯示從底部到頂端的功能表。
TPM_VERPOSANIMATION
0x1000L
以動畫顯示從上到下功能表。
 

若要讓任何動畫發生, SystemParametersInfo 函式必須設定 SPI_SETMENUANIMATION。 此外,如果功能表淡化動畫開啟,除了TPM_NOANIMATION之外,所有TPM_*ANIMATION 旗標都會被忽略。 如需詳細資訊,請參閱 SystemParametersInfo 中的 SPI_GETMENUFADE 旗標。

當另一個功能表已經顯示時,請使用 TPM_RECURSE 旗標來顯示功能表。 這是為了支援功能表內的操作功能表。

使用下列其中一個旗標來指定是否要容納水準或垂直對齊方式。

意義
TPM_HORIZONTAL
0x0000L
如果在未重疊排除矩形的情況下,無法在指定的位置顯示功能表,系統會嘗試在要求的垂直對齊之前容納所要求的水準對齊方式。
TPM_VERTICAL
0x0040L
如果在未重疊排除矩形的情況下,無法在指定的位置顯示功能表,系統會嘗試在要求的水準對齊之前容納要求的垂直對齊方式。
 

排除的矩形是功能表不應重疊的畫面部分;它是由 lptpm 參數所指定。

若為由右至左的文字版面配置,請使用 TPM_LAYOUTRTL。 根據預設,文字配置是由左至右。

[in] x

類型: int

快捷功能表的水準位置,以螢幕座標為單位。

[in] y

類型: int

快捷功能表的垂直位置,以螢幕座標為單位。

[in] hwnd

類型: HWND

擁有快捷功能表之視窗的句柄。 此視窗會從功能表接收所有訊息。 在函式傳回之前,視窗不會從功能表收到 WM_COMMAND 訊息。 如果您在 fuFlags 參數中指定TPM_NONOTIFY,函式不會將訊息傳送至 hwnd 所識別的視窗。 不過,您仍然必須在 hwnd 中傳遞視窗句柄。 它可以是來自您應用程式的任何視窗句柄。

[in, optional] lptpm

類型: LPTPMPARAMS

TPMPARAMS 結構的指標,指定功能表不應該重疊的螢幕區域。 此參數可以是 Null

傳回值

類型: BOOL

如果您在 fuFlags 參數中指定TPM_RETURNCMD,則傳回值會是使用者所選取專案的功能表項識別碼。 如果使用者取消功能表而不進行選取,或發生錯誤,則傳回值為零。

如果您未在 fuFlags 參數中指定TPM_RETURNCMD,如果函式成功,則傳回值為非零,如果函式失敗則為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

使用 SM_MENUDROPALIGNMENT 呼叫 GetSystemMetrics,以判斷正確的水準對齊旗標 (TPM_LEFTALIGNTPM_RIGHTALIGN) 和/或水平動畫方向旗標, (TPM_HORPOSANIMATION或TPM_HORNEGANIMATION) 傳遞至 TrackPopupMenu 或 TrackPopupMenuEx 這是建立最佳用戶體驗的必要條件,特別是在開發 Microsoft 平板電腦應用程式時。

若要顯示通知圖示的操作功能表,目前窗口必須是前景視窗,應用程式呼叫 TrackPopupMenuTrackPopupMenuEx。 否則,當使用者按單下功能表外部或建立功能表的視窗時,如果) 可見,功能表就不會消失 (。 如果目前的視窗是子視窗,您必須將最上層) 父視窗設定為前景視窗 (。

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 winuser.h (包含 Windows.h)
程式庫 User32.lib
Dll User32.dll
API 集合 ext-ms-win-ntuser-menu-l1-1-1 (在 Windows 8.1) 中引進

另請參閱

概念

CreatePopupMenu

GetSubMenu

功能表

參考

TPMPARAMS

WM_COMMAND