mfc 中在编辑区或者系统托盘上单击右键需要弹出菜单,网上的弹出菜单的代码非常多,但是都是千篇一律,而且仅仅能够弹出菜单,除非选择菜单项,否则菜单不消失,这对软件交互非常不利。这个问题微软在msdn上做过解释,但是是英文的。
具体解决如下
case WM_RBUTTONUP:
{
POINT point;
::GetCursorPos(&point);//得到鼠标位置
CMenu menu,* sub;
menu.LoadMenu(IDR_POP);
sub=menu.GetSubMenu(0);
SetForegroundWindow();
//确定弹出式菜单的位置
sub->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
//资源回收
sub->Detach();
sub->DestroyMenu();
}
break;
关键就在于
SetForegroundWindow();
,必须在调用
TrackPopupMenu
之前调用先将窗口激活,如果使用windowsAPI,需要SetForegroundWindow(HWND)传入窗口句柄