有兩個視窗,登錄視窗和主視窗,登錄后顯示主視窗;在主視窗點擊右鍵彈出選單,然后主視窗因為其他原因回到登錄視窗,但選單仍然存在;呼叫DestroyMenu也沒有效果;
彈出選單用的是TrackPopupMenu;
uj5u.com熱心網友回復:
TrackPopupMenu 前 先試試呼叫 SetForegroundWindowuj5u.com熱心網友回復:
不是這個,這個是滑鼠點擊其他視窗選單消失,這個是正常的。
在MFC模擬了一下:
視窗1是登陸視窗,視窗2是主視窗;
視窗1登錄時,隱藏自己,顯示視窗2(非模態);
視窗2定時注銷,然后彈出選單,等待注銷;注銷時隱藏自己,并把父親顯示出來;
結果:選單會正常消失;
我之前的是用duilib做的,也是登陸視窗登錄后隱藏自己,非模態顯示主視窗,但主視窗被踢的時候,隱藏自己,回到登錄視窗,但之前的選單還是顯示著。
uj5u.com熱心網友回復:
那就試試阻塞式的選單
void CTdgDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu *pMenu = menu.GetSubMenu(0);
if(pMenu != NULL)
{
BOOL bCmd = pMenu->TrackPopupMenu(
TPM_NONOTIFY | TPM_RETURNCMD, point.x, point.y, this);
TRACE(_T("MenuSel = %u\n"), (UINT)bCmd);
if(bCmd != 0)
{
PostMessage(WM_COMMAND, bCmd, 0);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/235774.html
標籤:界面
下一篇:MFC中繪制界面的原始碼在哪里看
