单双击事件的体会

   今天项目中遇到处理单双击事件的问题,找到CSDN中这样一篇帖子 WM_LBUTTONDOWN和WM_LBUTTONDBLCLK之间的事情
其中strip(阿飞 - Mozilla●CSDN●痛)这样写道:
   BOOL   bShouldTrigger   =   TRUE;  
  void   CDbClickDlg::OnLButtonDown(UINT   nFlags,   CPoint   point)    
  {  
  if(   nFlags&0x8000   )  
  AfxMessageBox("鼠标蛋鸡!");  
  else  
  {  
  bShouldTrigger   =   TRUE;  
  // UINT   aa   =   GetDoubleClickTime();   //   我的系统是500ms  
  SetTimer(   109,   200,   0   );  
  }  
  CDialog::OnLButtonDown(nFlags,   point);  
  }  
  void   CDbClickDlg::OnLButtonDblClk(UINT   nFlags,   CPoint   point)    
  {  
  bShouldTrigger   =   FALSE;  
  AfxMessageBox("鼠标双机!");  
  CDialog::OnLButtonDblClk(nFlags,   point);  
  }  
   
  void   CDbClickDlg::OnTimer(UINT   nIDEvent)    
  {  
  if(   nIDEvent   ==   109   )  
  {  
  KillTimer(   109   );  
  if(   bShouldTrigger   )  
  PostMessage(   WM_LBUTTONDOWN,   MK_LBUTTON|0x8000   ,   0   );  
  }  
  CDialog::OnTimer(nIDEvent);  
  }   
    
   在运用时,我自作聪明的省掉bShouldTrigger这个控制符,转而使用timer变量来作为控制符。省却双击事件,在单击事件中通过timer变量来判断是否为双击事件。
   结果实践证明我错了,双击如果太快时无法触发双击事件。
   后来考虑了一下才想起,SetTimer函数执行时肯定是需要时间的,因此双击时,有时发现timer事件依然为NULL,就是因为SetTimer函数仍然未返回,导致timer变量仍然为空。

   其实分开双击和单击事件,应该还有其他很多方法,比如使用事件,使用WaitableTimer,使用信号量等等,但是我想既然微软提供了双击的事件,一定是有原因的,它肯定是为了解决双击速度过快的问题的。

posted on 2007-07-09 16:34 迷宫の未来 阅读(333) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(10)

随笔档案

文章档案

最新随笔

搜索

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜