教程集 www.jiaochengji.com
教程集 >  脚本编程  >  Asp.net  >  正文 托盘左键单击和双击问题

托盘左键单击和双击问题

发布时间:2016-12-05   编辑:jiaochengji.com
教程集为您提供托盘左键单击和双击问题等资源,欢迎您收藏本站,我们将为您提供最新的托盘左键单击和双击问题资源

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

方案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;
   }

 

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

[关闭]
~ ~