TrackPopupMenu

https://msdn.microsoft.com/ja-jp/library/cc429946.aspx https://msdn.microsoft.com/ja-jp/library/ms647591.aspx https://msdn.microsoft.com/ja-jp/library/cc428944.aspx https://msdn.microsoft.com/ja-jp/library/ms536136.aspx https://msdn.microsoft.com/ja-jp/library/cc429946.aspx https://msdn.microsoft.com/ja-jp/library/ms647591.aspx

指定された位置にショートカットメニューを表示し、そのメニュー内のメニュー項目の選択状況を追跡します。ショートカットメニューは、画面内のどこにでも表示できます。

画面の特定の領域でショートカットメニューのオーバーラップ(重ね合わせ)を禁止するには、TrackPopupMenuEx 関数を使ってください。

BOOL TrackPopupMenu(
  HMENU hMenu,         // ショートカットメニューのハンドル
  UINT uFlags,         // オプション
  int x,               // 水平位置
  int y,               // 垂直位置
  int nReserved,       // 予約済み、0 を指定する
  HWND hWnd,           // 所有側ウィンドウのハンドル
  CONST RECT *prcRect  // 無視される
);

パラメータ

hMenu
表示対象のショートカットメニューのハンドルを指定します。新しいショートカットメニューを作成する場合は CreatePopupMenu 関数、既存のメニュー項目に関連付けられているサブメニューのハンドルを取得する場合は GetSubMenu 関数を呼び出すと、適切なハンドルを取得できます。
uFlags
0、または関数のオプションを表す次のフラグの組み合わせを指定します。

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

意味
TPM_CENTERALIGNショートカットメニューの中心を、x パラメータが指定する座標に合わせます。
TPM_LEFTALIGNショートカットメニューの左端を、x パラメータが指定する座標に合わせます。
TPM_RIGHTALIGNショートカットメニューの右端を、x パラメータが指定する座標に合わせます。

ショートカットメニューの垂直方向の配置方法を決定するには、次のフラグのいずれかを指定します。

意味
TPM_BOTTOMALIGNショートカットメニューの下端を、y パラメータが指定する座標に合わせます。
TPM_TOPALIGNショートカットメニューの上端を、y パラメータが指定する座標に合わせます。
TPM_VCENTERALIGNショートカットメニューの中心を、y パラメータが指定する座標に合わせます。

メニューに親ウィンドウを割り当てていない状況で、ユーザーが何か選択をした場合の動作方法を決定するには、次のフラグのいずれかを指定します。

意味
TPM_NONOTIFYユーザーが 1 つのメニュー項目をクリックしたとき、この関数は通知メッセージを送信しません。
TPM_RETURNCMD関数の戻り値として、ユーザーが選択したメニュー項目の識別子を返します。

マウスボタンを使ってショートカットメニューを選択する方法を決定するには、次のフラグのいずれかを指定します。

意味
TPM_LEFTBUTTONユーザーはマウスの左ボタンでのみ、ショートカットメニューの選択を行えます。
TPM_RIGHTBUTTONユーザーは、マウスの左と右どちらのボタンでも、ショートカットメニューの選択を行えます。

Windows 98 と Windows 2000:メニューのアニメーション表示の方法を決定するには、次のフラグのいずれかを指定します。

意味
TPM_HORNEGANIMATION左から右へ向かってメニューのアニメーション表示を行います。
TPM_HORPOSANIMATION右から左へ向かってメニューのアニメーション表示を行います。
TPM_NOANIMATIONアニメーションなしでメニューを表示します。
TPM_VERNEGANIMATION下から上へ向かってメニューのアニメーション表示を行います。
TPM_VERPOSANIMATION上から下へ向かってメニューのアニメーション表示を行います。

Windows 98 と Windows 2000:アニメーション表示を行うには、 関数の uiAction パラメータで SPI_SETMENUANIMATION フラグを指定しなければなりません。

Windows 2000:SystemParametersInfo 関数でメニューのフェードアニメーション表示を有効にした場合は、TrackPopupMenu 関数の uFlags パラメータ(このパラメータ)の TPM_*ANIMATION フラグは、TPM_NOANIMATION フラグを除き、いずれも無視されます。詳細については、SystemParametersInfo 関数の uiAction パラメータで SPI_GETMENUFADE フラグを参照してください。

Windows 98 と Windows 2000:他のメニューが既に表示されている状態で、さらにメニューを表示するには、TPM_RECURSE フラグを使います。このフラグは、1 つのメニュー内でコンテキストメニューをサポートすることを意図しています。

意味
TPM_RECURSEメニュー内で、特定のメニュー項目に関するチップヘルプの表示を有効にします。

x
ショートカットメニューの水平位置を、スクリーン座標で指定します。
y
ショートカットメニューの垂直位置を、スクリーン座標で指定します。
nReserved
予約されています。0 を指定してください。
hWnd
ショートカットメニューを所有する 1 つのウィンドウのハンドルを指定します。このウィンドウは、メニューが送信するすべてのメッセージを受信します。TrackPopupMenu 関数が制御を返した段階で、このウィンドウは メッセージを受信します。

uFlags パラメータで TPM_NONOTIFY フラグを指定すると、この関数は、hWnd パラメータで指定されたウィンドウへメッセージを送信しません。その場合も、hWnd パラメータで 1 つのウィンドウのハンドルを指定してください。アプリケーションの任意のウィンドウのハンドルを指定するだけでかまいません。

prcRect
無視されます。

戻り値

uFlags パラメータで TPM_RETURNCMD を指定した場合、ユーザーが選択したメニュー項目の識別子が返ります。ユーザーが何もメニュー項目を選択せずにメニューを取り消した場合や、エラーが発生した場合は、0 が返ります。

uFlags パラメータで TPM_RETURNCMD を指定しなかった場合、関数が成功すると、0 以外の値が返ります。関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。

対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h 内で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用

参照

CreatePopupMenu, GetSubMenu, , , TrackPopupMenuEx,

表示: