CMFCPopupMenu在Win7的后台保留

时间:2011-07-12 10:46:06

标签: c++ mfc system-tray tray

我正在尝试一些新的MFC功能,我希望Visual Studio 2010的Visual C ++语言示例中的TrayMenu项目能够在我的机器中完成(不知道是否只在我的机器中我尝试在网上找到同样的问题,但没有找到任何类似的报告!!!)菜单出现在新的win7 traynotifywwnd的背景中,我似乎无法正常工作:

代码很简单:

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是如何解决这个问题,但它不起作用,它仍然显示bewind窗口,当我们点击小箭头时隐藏和显示所有托盘图标(请注意,如果图标显示在ToolbarWindow32中 - 不隐藏 - 我们调用托盘上下文菜单然后一切正常,只有隐藏图标并使用ToolbarWindow32中的小箭头显示并且显示带有隐藏图标的窗口时才会出现此问题 - 这个窗口是否位于我的上下文菜单前面......)

context menu shown behind popup window

有没有人发现这个问题?这个问题有什么解决方案吗?

由于

2 个答案:

答案 0 :(得分:0)

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

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

而不是pMenu-> SetForegroundWindow();

答案 1 :(得分:0)

来自MSDN

  

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

对我来说这很有用!