MFC 判断单击双击
发布日期:2025-04-13 23:27:43 浏览次数:11 分类:精选文章

本文共 1113 字,大约阅读时间需要 3 分钟。

BOOL CXXXWnd::PreTranslateMessage(MSG* pMsg)  {    pClientPoint = pMsg->pt;      MSG message;      DWORD st = GetTickCount();      while(1)      {          if(::PeekMessage(&message, NULL, 0 ,0 , PM_REMOVE))          {              ::TranslateMessage(&message);              ::DispatchMessage(&message);              if(message.message == WM_LBUTTONDBLCLK)              {                  //双击事件                  break;              }              DWORD et = GetTickCount();              if(et - st > GetDoubleClickTime())              //双击时间间隔为500ms              {                  pClientPoint = pMsg->pt;                  this->ScreenToClient(&pClientPoint);                  if (rectCoord.PtInRect(pClientPoint))                  {                  }                  else                  {                  }              }              break;          }      }  }

这段代码定义了一个窗口类的PreTranslateMessage函数,主要用于处理窗口消息。函数首先将客户点设置为消息的坐标点,然后创建一个MSG结构体。接着,通过一个循环来处理消息。

在循环内部,函数首先检查是否有消息可读。如果有消息,则进行翻译和派发。如果是双击事件,则跳出循环。否则,计算当前时间戳并与之前记录的时间戳比较,判断是否超过双击时间间隔。如果超过,则将客户点转换为窗口客户坐标,并检查点是否在指定的区域。

这段代码的注释清晰,逻辑结构合理,适合用于窗口类的消息处理。

上一篇:MFC 打印预览 映射模式 坐标变换
下一篇:MFC ShowLog(CString strLog)

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年05月10日 14时40分45秒