托盘左键单击和双击问题

最近项目中有个托盘左键单击、双击事件,但发现双击的时候总是先弹出单击的菜单(这个是正常的,因为双击必定先触发单击事件嘛),那如何避免这样的情况呢....

方案1 : 用线程处理单击事件,延时判断,如果是双击,则不显示单击的菜单

首先在 对话框中添加  BOOL m_bLButtonFlag; //  0 表示单击  1 表示双击

然后再  

LRESULT XXX::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 

 case WM_LBUTTONDOWN:
   {
    // 显示菜单

afxbeginthread()...
    

   return TRUE;
   }

  case WM_LBUTTONDBLCLK: // 恢复显示
   {
    m_bLButtonFlag = TRUE;

      ...

  }

然后再线程中处理单击的事件信息

方案2 ,延时处理,SETTIMER(), 在ONTIMER 中处理相应的事件

 if (LOWORD(lParam) == WM_LBUTTONDOWN )
 { 
  SetTimer(111,500,NULL); 
 }

void CMy12314Dlg::OnTimer(UINT nIDEvent)
{
 // TODO: Add your message handler code here and/or call default

    if (m_showflag == false )
   {
    CMenu menu, *pSubMenu;
   if (!menu.LoadMenu(IDR_MENU2)) return ;
  if (!(pSubMenu = menu.GetSubMenu(0))) return;
 
   // Make first menu item the default (bold font)
  // ::SetMenuDefaultItem(pSubMenu->m_hMenu, 0, TRUE);
 
   //Display and track the popup menu
   CPoint pos;
   ::GetCursorPos(&pos);
   ::SetForegroundWindow(nd.hWnd); 
    ::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0, this->GetSafeHwnd(), NULL);
   }
   else
   {
   m_showflag = true;
   }

 

问题: 在线程中菜单显示一直没解决,后来改用定时器,单击菜单可以正常显示。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值