mfc右键菜单(包括系统托盘菜单)弹窗后如何消失

试了可用的解决方案是:

1,在弹出菜单前先设置窗口最前

2,弹出菜单后,发送一个WM_NULL消失

示例如下:

CMenu *pPopup = m_AppMenu.GetSubMenu(0); //获取第一个弹出菜单,所以第一个菜单必须有子菜单
CPoint point1;
//GetCursorPos(&point1);//获取当前光标的位置,以便使得菜单可以跟随光标 
CRect rect; // 在悬浮窗左下沿弹菜单
::GetWindowRect(this->GetSafeHwnd(), &rect);
point1.x = rect.left;
point1.y = rect.bottom;

SetForegroundWindow(); //使托盘菜单一直处于前列窗口

pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point1.x, point1.y, this);//在指定位置显示弹出菜单

PostMessage(WM_NULL, 0, 0);//解决托盘菜单不消失

 

posted @ 2024-06-25 15:15  晨光静默  阅读(34)  评论(0编辑  收藏  举报