MFC中有关鼠标单击双击响应的问题

来源:互联网 发布:网络公益广告征集 编辑:程序博客网 时间:2024/05/17 08:12

今天修改一程序的Bug,修改了半天,终无头绪。后猛然发现是因为双击的时候,也是响应单击消息函数。遂google,发现:Windows系统在系统的双击时间限制里双击鼠标左键调用OnLButtonDBlClk,双击鼠标左键实际上产生4个事件:WM_LBUTTONDOWN WM_LBUTTONUP,然后WM_LBUTTONDBLCK被调用,鼠标释放时的WM_LBUTTONUP消息。

最后还是实现了所需功能,但是感觉还不理想,如果能在PreTranslateMessage函数里面实现就更好了......

void CClickOrDBDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
// AfxMessageBox("one");
 MSG message;
 DWORD st = GetTickCount();
 while(1)
 {
  if(::PeekMessage(&message, NULL, 0 ,0 , PM_REMOVE))
  {
   ::TranslateMessage(&message);
   ::DispatchMessage(&message);
   if(message.message == WM_LBUTTONDBLCLK)
   {
    AfxMessageBox("two");
    break;
   }
  }
  DWORD et = GetTickCount();
  if(et - st > 200)
  {
   AfxMessageBox("one");
   break;
  }
 }
 CDialog::OnLButtonDown(nFlags, point);
}

原创粉丝点击