MFC 处理双击事件时屏蔽掉单击事件

来源:互联网 发布:人工智能 人类 奴隶 编辑:程序博客网 时间:2024/04/30 23:11
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函数获得。消息被分发到回调函数(过程函数),作用是消息传递给操作系统,然后操作系统去调用我们的回调函数,也就是说我们在窗体的过程函数中处理消息

×/

原创粉丝点击