本文共 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结构体。接着,通过一个循环来处理消息。
在循环内部,函数首先检查是否有消息可读。如果有消息,则进行翻译和派发。如果是双击事件,则跳出循环。否则,计算当前时间戳并与之前记录的时间戳比较,判断是否超过双击时间间隔。如果超过,则将客户点转换为窗口客户坐标,并检查点是否在指定的区域。
这段代码的注释清晰,逻辑结构合理,适合用于窗口类的消息处理。
转载地址:http://gryfk.baihongyu.com/