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 フラグは無視されます。 詳細については、SystemParametersInfoSPI_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を指定した場合、戻り値はユーザーが選択した項目のメニュー項目識別子です。 ユーザーが選択を行わずにメニューをキャンセルした場合、またはエラーが発生した場合、戻り値は 0 になります。

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

解説

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

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

要件

要件
サポートされている最小のクライアント 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-1 (Windows 8.1で導入)

関連項目

概念

CreatePopupMenu

GetSubMenu

メニュー

リファレンス

TPMPARAMS

WM_COMMAND