VC6解决托盘菜单不消失

CMenu menu; 
menu.LoadMenu(IDR_MNU_TRAY); // 2
CMenu* pMenu=menu.GetSubMenu(0);
CPoint point; 
GetCursorPos(&point); 
SetForegroundWindow(); //解决托盘菜单不消失
pMenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);  
PostMessage(WM_NULL,0,0); //解决托盘菜单不消失

SDK里写得很清楚地 

To   display   a   context   menu   for   a   notification   icon,   the   current   window   must   be   the   foreground   window   before   the   application   calls   TrackPopupMenu   or   TrackPopupMenuEx.   Otherwise,   the   menu   will   not   disappear   when   the   user   clicks   outside   of   the   menu   or   the   window   that   created   the   menu   (if   it   is   visible).   However,   when   the   current   window   is   the   foreground   window,   the   second   time   this   menu   is   displayed,   it   displays   and   then   immediately   disappears.   To   correct   this,   you   must   force   a   task   switch   to   the   application   that   called   TrackPopupMenu   at   some   time   in   the   near   future.   This   is   done   by   posting   a   benign   message   to   the   window   or   thread,   as   shown   in   the   following   code   sample:   

Hide   Example 

      SetForegroundWindow(hDlg); 

      //   Display   the   menu 
      TrackPopupMenu(       hSubMenu, 
                                          TPM_RIGHTBUTTON, 
                                          pt.x, 
                                          pt.y, 
                                          0, 
                                          hDlg, 
                                          NULL); 

      PostMessage(hDlg,   WM_NULL,   0,   0); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值