1

我正在使用 C++ 和 Win32。

我希望我的上下文菜单和设置对话框显示在托盘图标附近。我想我需要图标的坐标来做到这一点。

Shell_NotifyIconGetRect 直到 Windows 7 才可用。

WM_CONTEXTMENU 从 Win2k 开始可用,但从 Vista 开始仅提供 wParam 中的坐标(以及在指定 NOTIFYICON_VERSION_4 时)。

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 回答