如何在Windows XP上放置通知(托盘)图标上下文菜单?

我正在使用C ++和Win32。 我希望我的上下文菜单和设置对话框显示在托盘图标附近。我想我需要图标的坐标才能做到这一点。 Shell_NotifyIconGetRect在Windows 7之前不可用。 WM_CONTEXTMENU从Win2k开始可用,但仅在Vista中提供wParam中的坐标(当指定NOTIFYICON_VERSION_4时)。     
已邀请:
解决此问题的正确方法是使用鼠标消息坐标,或使用GetMessagePos来处理其他消息。     
使用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;
    // ...
    }
    // ...
    
要显示菜单,您只需要通过WM_CONTEXTMENU或WM_RBUTTONUP传递给您的坐标(这些当然不是普通消息,而是由托盘生成的内容,因此您无需处理鼠标与键盘) 如果要在托盘附近显示Toast(自定义窗口),则使用Shell_NotifyIconGetRect。在< 7你可以通过查找带有Shell_TrayWnd作为父级的TrayNotifyWnd类来使用findwindow来模拟它     

要回复问题请先登录注册