3

我正在尝试一些新的 MFC 功能,我想要与 Visual C++ Language Samples for Visual Studio 2010 中的 TrayMenu 项目相同的东西,但在我的机器上(不知道是否只在我的机器上我试图找到网上有同样的问题,但没有找到任何类似的报告!!!)菜单出现在新的win7托盘通知wwnd的背景中,我似乎无法正常工作:

代码很简单:

void CTrayMenuDlg::OnTrayContextMenu ()
{
      CPoint point;
      ::GetCursorPos (&point);

      CMenu menu;
      menu.LoadMenu (IDR_MENU1);

      CMFCPopupMenu::SetForceShadow (TRUE);

      HMENU hMenu = menu.GetSubMenu (0)->Detach ();
      CMFCPopupMenu* pMenu = theApp.GetContextMenuManager()->ShowPopupMenu(hMenu, point.x, point.y, this, TRUE);

      pMenu->SetForegroundWindow ();
 }

我认为 SetForegroundWindow 可以解决这个问题,但它不起作用,当我们单击小箭头时,它仍然显示在隐藏和显示所有托盘图标的窗口(请注意,如果图标显示在ToolbarWindow32 - 不隐藏 - 我们调用托盘上下文菜单然后一切正常,这个问题只有在图标被隐藏并且使用 ToolbarWindow32 中的小箭头显示并且显示带有隐藏图标的窗口时才会出现 - 这是留在我的上下文菜单前面的窗口...)

弹出窗口后面显示的上下文菜单

有没有人发现这个问题?这个问题有什么解决办法吗?

谢谢

4

2 回答 2

1

来自MSDN

在in函数::SetWindowPos(pMenu->m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
之前添加。pMenu->SetForegroundWindow ();
CTrayMenuDlg::OnTrayContextMenu ()

对我来说,这行得通!

于 2013-05-15T11:36:02.917 回答
1

我不确定这个,但你可以尝试添加:

    // Set window position to topmost window.
    pMenu->SetWindowPos(
                &CWnd::wndTopMost,
                0, 0, 0, 0,
                SWP_NOMOVE | SWP_NOREDRAW | SWP_NOSIZE ); 

而不是 pMenu->SetForegroundWindow ();

于 2011-07-19T06:10:28.403 回答