2011-07-12 48 views
2

我在嘗試一些新的MFC功能,並且我想從Visual C++ 2010的Visual C++語言示例中的TrayMenu項目在我的機器上做同樣的事情(不知道是否是隻在我的機器上,我試圖找到網絡中的同樣的問題,但沒有找到任何類似的報告!!!)菜單出現在新的win7 traynotifywwnd的背景下,我似乎無法使其正確工作:CMFCPopupMenu停留在Win7的背景下

代碼很簡單:

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是一些如何針對此問題的修復程序,但它不能正常工作,它劇照SH當我們點擊小箭頭時,隱藏和顯示所有托盤圖標的窗口(注意,如果圖標顯示在ToolbarWindow32中 - 不隱藏 - 我們調用托盤上下文菜單,那麼它一切正常,這個問題如果圖標是隱藏的,是顯示了使用在ToolbarWindow32的小箭頭,顯示與隱藏的圖標窗口只出現 - 這是窗口,留在我的上下文菜單中的前...)

context menu shown behind popup window

有沒有人發現這個問題?有什麼解決這個問題的?

感謝

+0

我看到同樣的問題,所以我編輯了你的問題添加一個截圖。 – ChrisN

+0

嗨Nuno,幾天前我也面臨同樣的問題。爲了解決這個問題,我使用了SetForegroundWindow(hParent)。其中hParent是創建系統托盤期間傳遞的窗口句柄。請讓我知道如果這解決了這個問題。 –

+0

嗨,沒有SetForegroundWindow不適用於我... – Nuno

回答

0

我不知道這一個,但你可以嘗試添加:

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

代替pMenu-> SetForegroundWindow();

+0

是已經嘗試過,但也沒有成功,問題是,當菜單有彈出菜單,那麼第一個將是最上面的一個,而不是新的彈出菜單... – Nuno

0

MSDN

pMenu->SetForegroundWindow();
添加::SetWindowPos(pMenu->m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
CTrayMenuDlg::OnTrayContextMenu()功能。

對我來說這工作!