首页 > 解决方案 > Shell_NotifyIcon:托盘图标同时显示 - 弹出菜单和任务栏菜单

问题描述

我创建了在鼠标右键单击时显示弹出菜单的托盘图标:

NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA); 
nid.hWnd = (HWND) hWnd;   
nid.uID = 12345;
nid.uFlags = NIF_ICON | NIF_MESSAGE;
nid.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_TRAY_ICON);
nid.uCallbackMessage = WM_USER_SHELLICON; 
Shell_NotifyIcon(NIM_ADD, &nid);

hWnd - 是主窗口,它是隐藏的。WndProc 看起来像:

LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
  switch (Message) 
  {
    case WM_USER_SHELLICON: 
    {
      switch(LOWORD(lParam)) 
      {   
        case WM_RBUTTONDOWN: 
        {
          HMENU hPopupsMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDC_POPUPS));
          if (hPopupsMenu)
          {
            HMENU hTrayPopupMenu = GetSubMenu(hPopupsMenu, 0);
            if (hTrayPopupMenu) 
            {
              POINT lpClickPoint; 
              GetCursorPos(&lpClickPoint);         
              SetForegroundWindow(hWnd);
              TrackPopupMenu(hTrayPopupMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_BOTTOMALIGN, lpClickPoint.x, lpClickPoint.y, 0, hWnd, NULL);
            }
            DestroyMenu(hPopupsMenu);
          }
        } 
        break;
      }
      break;
    }
...

当我右键单击托盘图标时,它会显示我的弹出菜单。问题是也显示了默认的任务栏上下文菜单。如何解决?

标签: c++winapivisual-c++

解决方案


推荐阅读