1

C++ と Win32 を使用しています。

コンテキスト メニューと設定ダイアログをトレイ アイコンの近くに表示したい。そのためにはアイコンの座標が必要だと思います。

Shell_NotifyIconGetRect は Windows 7 まで利用できませんでした。

WM_CONTEXTMENU は Win2k 以降で使用できますが、Vista 以降 (および NOTIFYICON_VERSION_4 を指定する場合) の wParam でのみ座標を提供します。

4

3 に答える 3

2

これを解決する正しい方法は、マウス メッセージ座標を使用するか、他のメッセージにGetMessagePosを使用することです。

于 2011-04-08T17:11:35.480 に答える
1

GetCursorPos でクリック座標を取得するとうまくいきます。

// Inside WndProc's switch(message)...
case WM_APP_NOTIFYCALLBACK:
    switch (LOWORD(lParam))
    {
    case WM_CONTEXTMENU: // XP and later
        {
            POINT pt = {};
            if( GetCursorPos(&pt) )
                ShowContextMenu(hWnd, pt, iStatus);
        }
        break;
    // ...
    }
    // ...
于 2011-04-08T18:35:06.920 に答える
0

メニューを表示するために必要なのは、WM_CONTEXTMENU または WM_RBUTTONUP によって渡された座標だけです (これらはもちろん通常のメッセージではありませんが、トレイによって生成されるものであるため、マウスとキーボードを扱う必要はありません)。

トレイの近くにトースト (カスタム ウィンドウ) を表示する場合は、Shell_NotifyIconGetRect を使用します。< 7 では、Shell_TrayWnd を親として TrayNotifyWnd クラスを探すことで、findwindow でエミュレートできます。

于 2011-04-08T16:39:41.560 に答える