CMFCPopupMenu остается в фоновом режиме в Win7 - PullRequest
2 голосов
/ 12 июля 2011

Я пробую некоторые из новых функциональных возможностей MFC и хочу то же самое, что делает проект TrayMenu из примеров языка Visual C ++ для Visual Studio 2010, но на моей машине (не знаю, находится ли он только на моей машине, я пытаюсь чтобы найти ту же проблему в Интернете, но не нашел никакого подобного отчета !!!) меню появляется на фоне нового 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 - это решение проблемы, но оно не работает, оно все еще отображается под окном, где все значки в трее скрыты и отображаются, когда мы нажимаем маленькую стрелку (обратите внимание, что если значок отображается в ToolbarWindow32 - не скрыто - и мы вызываем контекстное меню в трее, тогда все работает нормально, эта проблема появляется, только если значок скрыт и отображается с помощью маленькой стрелки в ToolbarWindow32, а окно отображается со скрытыми значками - это окно, которое находится перед моим контекстным меню ...)

context menu shown behind popup window

Кто-нибудь нашел эту проблему? и есть ли решение этой проблемы?

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 мая 2013

С MSDN :

Добавить ::SetWindowPos(pMenu->m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
до pMenu->SetForegroundWindow ();
в функции CTrayMenuDlg::OnTrayContextMenu ().

Для меня это сработало!

0 голосов
/ 19 июля 2011

Я не уверен в этом, но вы можете попробовать добавить:

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

вместо pMenu-> SetForegroundWindow ();

...