TrackPopupMenu 函式 (winuser.h)
在指定的位置顯示快捷方式功能表,並追蹤功能表上的專案選取範圍。 快顯功能表可以出現在畫面上的任何位置。
語法
BOOL TrackPopupMenu(
[in] HMENU hMenu,
[in] UINT uFlags,
[in] int x,
[in] int y,
[in] int nReserved,
[in] HWND hWnd,
[in, optional] const RECT *prcRect
);
參數
[in] hMenu
類型: HMENU
要顯示的快捷方式功能表控制碼。 您可以呼叫 CreatePopupMenu 來建立新的快捷方式功能表,或呼叫 GetSubMenu 來擷取與現有功能表項目相關聯的子功能表控制碼來取得控制碼。
[in] uFlags
類型: UINT
使用其中零個旗標來指定函式選項。
使用下列其中一個旗標來指定函式如何水準定位快捷方式功能表。
值 | 意義 |
---|---|
|
將快捷方式功能表水準置中,相對於 x 參數所指定的座標。 |
|
放置快捷方式功能表,使其左側對齊 x 參數所指定的座標。 |
|
放置快捷方式功能表,使其右側對齊 x 參數所指定的座標。 |
使用下列其中一個旗標來指定函式如何垂直放置快捷方式功能表。
值 | 意義 |
---|---|
|
放置快捷方式功能表,使其底部對齊 y 參數所指定的座標。 |
|
放置快捷方式功能表,使其頂端對齊 y 參數所指定的座標。 |
|
將快捷方式功能表垂直置中,相對於 y 參數所指定的座標。 |
使用下列旗標來控制使用者選取專案的探索,而不需要設定功能表的父視窗。
值 | 意義 |
---|---|
|
當使用者按一下功能表項目時,函式不會傳送通知訊息。 |
|
函式會傳回傳回值中使用者選取範圍的功能表項目識別碼。 |
使用下列其中一個旗標來指定快顯功能表追蹤的滑鼠按鍵。
值 | 意義 |
---|---|
|
使用者可以只選取滑鼠左鍵的功能表項目。 |
|
使用者可以同時選取具有滑鼠左鍵和右鍵的功能表項目。 |
使用下列旗標的任何合理組合來修改功能表的動畫。 例如,藉由選取水準和垂直旗標,即可達成對角動畫。
若要讓任何動畫發生, SystemParametersInfo 函式必須設定 SPI_SETMENUANIMATION。 此外,如果功能表淡化動畫開啟,除了 TPM_NOANIMATION之外,所有TPM_*ANIMATION 旗標都會被忽略。 如需詳細資訊,請參閱SystemParametersInfo中的SPI_GETMENUFADE旗標。
當另一個功能表已經顯示時,請使用 TPM_RECURSE 旗標來顯示功能表。 這是為了支援功能表內的操作功能表。
若為由右至左的文字版面配置,請使用 TPM_LAYOUTRTL。 根據預設,文字配置是由左至右。
[in] x
類型: int
快顯功能表的水準位置,以螢幕座標為單位。
[in] y
類型: int
快顯功能表的垂直位置,以螢幕座標為單位。
[in] nReserved
類型: int
保留;必須是零。
[in] hWnd
類型: HWND
擁有快顯功能表之視窗的控制碼。 此視窗會從功能表接收所有訊息。 在函式傳回之前,視窗不會從功能表收到 WM_COMMAND 訊息。 如果您在 uFlags 參數中指定TPM_NONOTIFY,則函式不會將訊息傳送至 hWnd所識別的視窗。 不過,您仍必須在 hWnd中傳遞視窗控制碼。 它可以是應用程式的任何視窗控制碼。
[in, optional] prcRect
類型: const RECT*
忽略。
傳回值
類型: BOOL
如果您在uFlags參數中指定TPM_RETURNCMD,則傳回值是使用者所選取專案的功能表項目識別碼。 如果使用者取消功能表而不進行選取,或發生錯誤,則傳回值為零。
如果您未在uFlags參數中指定TPM_RETURNCMD,如果函式成功,則傳回值為非零,如果函式失敗則為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
使用SM_MENUDROPALIGNMENT呼叫GetSystemMetrics,以判斷正確的水準對齊旗標 (TPM_LEFTALIGN或TPM_RIGHTALIGN) 和/或水準動畫方向旗標, (TPM_HORPOSANIMATION或TPM_HORNEGANIMATION) 傳遞至TrackPopupMenu 或 TrackPopupMenuEx。 這是建立最佳使用者體驗的必要條件,特別是在開發 Microsoft 平板電腦應用程式時。
若要指定功能表不應重迭的畫面區域,請使用 TrackPopupMenuEx 函式
若要顯示通知圖示的操作功能表,目前視窗必須是前景視窗,應用程式才會呼叫 TrackPopupMenu 或 TrackPopupMenuEx。 否則,當使用者按一下功能表外部或建立功能表的視窗時,功能表將不會消失 (如果) 可見。 如果目前的視窗是子視窗,您必須將 (最上層) 父視窗設定為前景視窗。
不過,當目前視窗是前景視窗時,第二次顯示這個功能表時,它就會顯示,然後立即消失。 若要更正此問題,您必須強制工作切換至名為 TrackPopupMenu的應用程式。 這是藉由將良性訊息張貼至視窗或執行緒來完成,如下列程式碼範例所示:
SetForegroundWindow(hDlg);
// Display the menu
TrackPopupMenu( hSubMenu,
TPM_RIGHTBUTTON,
pt.x,
pt.y,
0,
hDlg,
NULL);
PostMessage(hDlg, WM_NULL, 0, 0);
範例
如需範例,請參閱 顯示快捷方式功能表。
規格需求
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winuser.h (包括 Windows.h) |
程式庫 | User32.lib |
Dll | User32.dll |
API 集合 | ext-ms-win-ntuser-menu-l1-1-0 (在 Windows 8) |
另請參閱
概念
參考