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
関数のオプションを指定します。
次のいずれかのフラグを使用して、関数がショートカット メニューを水平方向に配置する方法を指定します。
関数がショートカット メニューを垂直方向に配置する方法を指定するには、次のいずれかのフラグを使用します。
メニューの親ウィンドウを設定しなくても、ユーザー選択の検出を制御するには、次のフラグを使用します。
値 | 意味 |
---|---|
|
ユーザーがメニュー項目をクリックしても、この関数は通知メッセージを送信しません。 |
|
関数は、戻り値でユーザーの選択のメニュー項目識別子を返します。 |
ショートカット メニューで追跡するマウス ボタンを指定するには、次のいずれかのフラグを使用します。
値 | 意味 |
---|---|
|
ユーザーは、マウスの左ボタンのみでメニュー項目を選択できます。 |
|
ユーザーは、マウスの左ボタンと右ボタンの両方でメニュー項目を選択できます。 |
メニューのアニメーションを変更するには、次のフラグの適切な組み合わせを使用します。 たとえば、水平フラグと垂直フラグを選択することで、対角線アニメーションを実現できます。
アニメーションを実行するには、 SystemParametersInfo 関数で SPI_SETMENUANIMATIONを設定する必要があります。 また、メニュー フェード アニメーションがオンの場合、TPM_NOANIMATIONを除くすべてのTPM_*ANIMATION フラグは無視されます。 詳細については、SystemParametersInfo の SPI_GETMENUFADE フラグを参照してください。
TPM_RECURSE フラグを使用して、別のメニューが既に表示されている場合にメニューを表示します。 これは、メニュー内のコンテキスト メニューをサポートすることを目的としています。
次のいずれかのフラグを使用して、水平方向または垂直方向の配置に対応するかどうかを指定します。
除外された四角形は、メニューが重ならないように画面の一部です。 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_MENUDROPALIGNMENTで GetSystemMetrics を呼び出します。 これは、特に 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で導入) |
関連項目
概念
リファレンス