VC雕虫小技:关于弹出菜单

在用VC做一些软件功能的时候,为了方便使用,通常会涉及到托盘编程。也就是在程序最小化的时候,会在右下角的托盘区域添加一个图标,这个图标通常会支持弹出菜单功能。问题就在这里出现了,你也许会发现我们使用TrackPopupMenu呼出的弹出菜单,如果用户在取消选择的时候,在桌面任意地方单击,这个菜单也不会消失,很是郁闷,通常让初学者感到万念俱灰~~。 托盘程序中调用弹出菜单示例代码如下:

if(message==WM_SHELL_NOTIFY && lParam==WM_RBUTTONDOWN)
{
    CPoint pt;
    GetCursorPos(&pt);
    CMenu *pMenu,menu;
    menu.LoadMenu(IDR_SYSMENU);
    pMenu=menu.GetSubMenu(0);
    pMenu->TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this,0);
}

要解决这个问题,其实比较简单,在响应托盘消息以及鼠标右击消息的时候,需要我们先调用一个函数,在你弹出菜单之前,设置你的窗口为最前窗口,问题就会迎刃而解。 修改后的代码如下: if(message==WM_SHELL_NOTIFY && lParam==WM_RBUTTONDOWN) { this->SetForegroundWindow(); //这里将主窗口设置为最前端窗口 CPoint pt; GetCursorPos(&pt); CMenu *pMenu,menu; menu.LoadMenu(IDR_SYSMENU); pMenu=menu.GetSubMenu(0); pMenu->TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this,0); }

编译后,再看看效果,问题就这样解决了。

支持原创技术分享,据说打赏我的人,都找到了女朋友!