:关于系统托盘弹出MENU后不能自动销毁有关问题,难
::::::::::::关于系统托盘弹出MENU后不能自动销毁问题,:::::难
在系统托盘区处调用TrackPopupMenu弹出一个菜单,但是弹出以后如果鼠标在其他区域点了以后该MENU不能自动消失,查看MSDN,解释说只能是SetForegroundWindow()+PostMessage(this-> m_hWnd,WM_NULL,0,0)结合才能自动消失,现在关键问题是我的程序不能使用这样的方法解决,原因是我的程序里有浮动的模态窗口,如果使用这样的方法,只要在系统托盘点了鼠标,还没有选择菜单,此时我的模态窗口已经SHOW出来了,使得程序的业务逻辑就错误了,
不知道如何解决菜单自动销毁问题,总之不能使用MSDN提供的这样的方法!
分数不够可以加,解决问题要紧,SOS!!!!!!
------解决方案--------------------
在系统托盘区处调用TrackPopupMenu弹出一个菜单,但是弹出以后如果鼠标在其他区域点了以后该MENU不能自动消失,查看MSDN,解释说只能是SetForegroundWindow()+PostMessage(this-> m_hWnd,WM_NULL,0,0)结合才能自动消失,现在关键问题是我的程序不能使用这样的方法解决,原因是我的程序里有浮动的模态窗口,如果使用这样的方法,只要在系统托盘点了鼠标,还没有选择菜单,此时我的模态窗口已经SHOW出来了,使得程序的业务逻辑就错误了,
不知道如何解决菜单自动销毁问题,总之不能使用MSDN提供的这样的方法!
分数不够可以加,解决问题要紧,SOS!!!!!!
------解决方案--------------------
- C/C++ code
BOOL AfxShowPopupMenu(CWnd* pWnd, UINT nID) { ASSERT(nID!=NULL && pWnd!=NULL); CMenu menu; CPoint pt; GetCursorPos(&pt); if(!menu.LoadMenu(nID)) { TRACE0("Falied to load menu source.\n"); return FALSE; } CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); pWnd->SetForegroundWindow(); return pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, pWnd); }