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

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函数获得。消息被分发到回调函数(过程函数),作用是消息传递给操作系统,然后操作系统去调用我们的回调函数,也就是说我们在窗体的过程函数中处理消息

×/

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值