现在的位置: 首页 > 综合 > 正文

VC6解决托盘菜单不消失

2013年10月05日 ⁄ 综合 ⁄ 共 1224字 ⁄ 字号 评论关闭
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); 

抱歉!评论已关闭.