void CPlayWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
//屏蔽双击时的单击事件
MSG message;
DWORD st = GetTickCount();
while(1)
{
if(::PeekMessage(&message, NULL, 0 ,0 , PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
if(message.message == WM_LBUTTONDBLCLK)
{
//判断为双击
//忽略掉,在OnLButtonDblClk中会有处理
break;
}
DWORD et = GetTickCount();
if(et - st > 200)
{
//判断为单击
//此处为单击事件处理代码
break;
}
}
}
CWnd::OnLButtonDown(nFlags, point);
}
void CPlayWnd::OnLButtonUp(UINT nFlags, CPoint point)
{
//Up事件
CWnd::OnLButtonUp(nFlags, point);
}
void CPlayWnd::OnLButtonDblClk(UINT nFlags, CPoint point)
{
//双击事件处理代码
CWnd::OnLButtonDblClk(nFlags, point);
}
/×
Add:
GetTickCount():t返回从操作系统启动到现在所经过的毫秒数,它的返回值是DWORD。
GetDoubleClickTime():该函数取得鼠标的当前双击时间。一次双击是指对鼠标键的两次连击,第一次击键后在指定时间内击第二次。双击时间是指在双击中,第一次击键和第二次击键之间的最大毫秒数
PeekMessage():PeekMessage是一个Windows API函数。该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构,和函数GetMessage不一样的是,GetMessage:从系统获取消息,将消息从系统中移除,属于阻塞函数。当系统无消息时,GetMessage会等待下一条消息。而函数PeekMesssge是以查看的方式从系统中获取消息,可以不将消息从系统中移除,是非阻塞函数;当系统无消息时,返回FALSE,继续执行后续代码。
TranslateMessage():该函数将虚拟键消息转换为字符消息。字符消息被寄送到调用线程的消息队列里,当下一次线程调用函数GetMessage或PeekMessage时被读出。
DispatchMessage():该函数分发一个消息给窗口程序。通常消息从GetMessage函数获得。消息被分发到回调函数(过程函数),作用是消息传递给操作系统,然后操作系统去调用我们的回调函数,也就是说我们在窗体的过程函数中处理消息
×/