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

使用其中零個旗標來指定函式選項。

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

意義
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_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_LEFTALIGNTPM_RIGHTALIGN) 和/或水準動畫方向旗標, (TPM_HORPOSANIMATION或TPM_HORNEGANIMATION) 傳遞至TrackPopupMenu 或 TrackPopupMenuEx 這是建立最佳使用者體驗的必要條件,特別是在開發 Microsoft 平板電腦應用程式時。

若要指定功能表不應重迭的畫面區域,請使用 TrackPopupMenuEx 函式

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

不過,當目前視窗是前景視窗時,第二次顯示這個功能表時,它就會顯示,然後立即消失。 若要更正此問題,您必須強制工作切換至名為 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)

另請參閱

概念

CreatePopupMenu

GetSubMenu

功能表

參考

TrackPopupMenuEx

WM_COMMAND