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

これらのフラグのうち 0 個以上を使用して、関数オプションを指定します。

次のいずれかのフラグを使用して、関数がショートカット メニューを水平方向に配置する方法を指定します。

説明
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 フラグは無視されます。 詳細については、SystemParametersInfoSPI_GETMENUFADE フラグを参照してください。

TPM_RECURSE フラグを使用して、別のメニューが既に表示されている場合にメニューを表示します。 これは、メニュー内のコンテキスト メニューをサポートすることを目的としています。

右から左へのテキスト レイアウトの場合は、 TPM_LAYOUTRTLを使用します。 既定では、テキスト レイアウトは左から右です。

[in] x

型: int

画面座標内のショートカット メニューの水平方向の位置。

[in] y

型: int

ショートカット メニューの垂直位置 (画面座標)。

[in] nReserved

型: int

予約;は 0 である必要があります。

[in] hWnd

型: HWND

ショートカット メニューを所有するウィンドウへのハンドル。 このウィンドウは、メニューからすべてのメッセージを受信します。 ウィンドウは、関数が戻るまでメニューから WM_COMMAND メッセージを受け取りません。 uFlags パラメーターで TPM_NONOTIFY を指定した場合、関数は hWnd で識別されたウィンドウにメッセージを送信しません。 ただし、 hWnd でウィンドウ ハンドルを渡す必要があります。 アプリケーションの任意のウィンドウ ハンドルを指定できます。

[in, optional] prcRect

型: const RECT*

無視されます。

戻り値

種類: BOOL

uFlags パラメーターでTPM_RETURNCMDを指定した場合、戻り値はユーザーが選択した項目のメニュー項目識別子です。 ユーザーが選択を行わずにメニューをキャンセルした場合、またはエラーが発生した場合、戻り値は 0 になります。

uFlags パラメーターでTPM_RETURNCMDを指定しない場合、関数が成功した場合は 0 以外、失敗した場合は 0 が返されます。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

TrackPopupMenu または TrackPopupMenuEx に渡す正しい水平方向の配置フラグ (TPM_LEFTALIGNまたはTPM_RIGHTALIGN) または水平方向のアニメーション方向フラグ (TPM_HORPOSANIMATIONまたはTPM_HORNEGANIMATION) を決定するには、SM_MENUDROPALIGNMENTGetSystemMetrics を呼び出します。 これは、特に Microsoft タブレット PC アプリケーションを開発する場合に、最適なユーザー エクスペリエンスを作成するために不可欠です。

メニューが重ならないように画面の領域を指定するには、 TrackPopupMenuEx 関数を使用します。

通知アイコンのコンテキスト メニューを表示するには、アプリケーションが TrackPopupMenu または TrackPopupMenuEx を呼び出す前に、現在のウィンドウがフォアグラウンド ウィンドウである必要があります。 それ以外の場合、ユーザーがメニューの外側またはメニューを作成したウィンドウ (表示されている場合) をクリックしても、メニューは消えません。 現在のウィンドウが子ウィンドウの場合は、(最上位レベルの) 親ウィンドウを前景ウィンドウとして設定する必要があります。

ただし、現在のウィンドウがフォアグラウンド ウィンドウの場合、このメニューを 2 回目に表示すると、そのウィンドウが表示され、すぐに消えます。 これを修正するには、 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 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winuser.h (Windows.h を含む)
Library User32.lib
[DLL] User32.dll
API セット ext-ms-win-ntuser-menu-l1-1-0 (Windows 8 で導入)

関連項目

概念

CreatePopupMenu

GetSubMenu

メニュー

リファレンス

TrackPopupMenuEx

WM_COMMAND