TrackPopupMenuEx

指定された座標にショートカットメニューを表示します。ショートカットメニューは、スクリーン上のどの位置にでも表示させることができます。

BOOL TrackPopupMenuEx(
    HMENU hMenu,       // メニューハンドル
    UINT  fuFlags,     // オプションフラグ
    int   x,           // x座標
    int   y,           // y座標
    HWND  hWnd,        // ウィンドウハンドル
    LPTPMPARAMS ptpm   // オーバーラップ禁止範囲
);

USER32.DLL

引数

hMenu

表示されるショートカットメニューのハンドルを指定します。このショートカットメニューは CreatePopupMenu 関数によって作成されたショートカットメニューか、または GetSubMenu 関数によって取得された既存のメニューアイテムに関連付けられているサブメニューです。

fuFlags

関数のオプションを指定します。

水平方向の表示位置を次のいずれかで指定します。

意味
0x0000 (TPM_LEFTALIGN)

x パラメータがショートカットメニューの左端の x 座標になるように表示されます。(デフォルト)

0x0004 (TPM_CENTERALIGN)

x パラメータがショートカットメニューの中央の x 座標になるように表示されます。

0x0008 (TPM_RIGHTALIGN)

x パラメータがショートカットメニューの右端の x 座標になるように表示されます。

垂直方向の表示位置を次のいずれかで指定します。

意味
0x0000 (TPM_TOPALIGN)

y パラメータがショートカットメニューの上端の y 座標になるように表示されます。(デフォルト)

0x0010 (TPM_VCENTERALIGN)

y パラメータがショートカットメニューの中央の y 座標になるように表示されます。

0x0020 (TPM_BOTTOMALIGN)

y パラメータがショートカットメニューの下端の y 座標になるように表示されます。

メニューがオーナーウィンドウを持たない場合の動作は、次のいずれかで指定します。

意味
0x0080 (TPM_NONOTIFY)

アイテムがクリックされたとき、通知メッセージを送りません。

0x0100 (TPM_RETURNCMD)

関数の戻り値として、選択されたメニューアイテムの ID を返します。

メニュー選択のマウスに関する処理について、次のいずれかを指定します。

意味
0x0000 (TPM_LEFTBUTTON)

メニューアイテムをマウスの左ボタンで選択します。(デフォルト)

0x0002 (TPM_RIGHTBUTTON)

メニューアイテムをマウスの左右両方のボタンで選択できるようにします。

オーバーラップした場合の動作を、次のいずれかで指定します。

意味
0x0000 (TPM_HORIZONTAL)

メニューが ptpm パラメータで指定した領域にオーバーラップする場合、メニューを水平方向に移動します。(デフォルト)

0x0040 (TPM_VERTICAL)

メニューが ptpm パラメータで指定した領域にオーバーラップする場合、メニューを垂直方向に移動します。

x, y

ショートカットメニューを表示させる座標をスクリーン座標系で指定します。

hWnd

ショートカットメニューを所有するオーナーウィンドウのハンドルを指定します。メニューから送られるメッセージのすべてがこのウィンドウに送られます。メニューアイテムが選択されると WM_COMMAND メッセージが送られます。

fuFlags パラメータに 0x0080 (TPM_NONOTIFY) を指定した場合は、ウィンドウにメッセージは送られません。ただし、その場合でもこのパラメータに有効なウィンドウハンドルを指定しなければなりません。この場合は、アプリケーションの持つどのウィンドウのハンドルでも指定することができます。

ptpm

メニューをオーバーラップさせない領域の座標を格納した TPMPARAMS 構造体のアドレスを指定します。このパラメータが不要である場合は 0 (NULL) を指定することができます。

戻り値

成功すると 0 以外の値が返ります。

失敗すると 0 が返ります。拡張エラー情報を取得するには、 GetLastError 関数を使います。

fuFlags パラメータに 0x0100 (TPM_RETURNCMD)を指定した場合は選択されたアイテムの ID が返ります。メニューアイテムが選択されなかった場合は 0 が返ります。

解説

タスクバーのステータスエリアに表示される通知アイコンからコンテキストメニューを表示させるには、 TrackPopupMenu 関数や TrackPopupMenuEx 関数を呼び出す前にカレントウィンドウがフォアグラウンドになければなりません。そうしなければ、メニューまたはそれを作成したウィンドウの外側の部分をクリックしたときに、メニューが表示されたままになってしまいます。

対応情報

Windows 95 以降 / Windows NT 4.0 以降