关于弹出菜单

在用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);
    }

编译后,再看看效果,问题就这样解决了。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值