mfc按钮响应双击消息

mfc的按钮不知道为什么不能响应双击响应。如果需要响应双击,要根据WM_LBUTTONUP来判断,这个判断要放到PreTranslateMessage里做,所以我们要是想响应按钮的双击,应该要继承一个按钮,并在PreTranslateMessage写如下代码:

BOOL CDuiBaseControl::PreTranslateMessage(MSG* pMsg)
{
	// TODO:  在此添加专用代码和/或调用基类
	if (pMsg->message == WM_LBUTTONUP)//mfc的按钮不知道为什么不能响应双击响应。如果需要响应双击,要根据WM_LBUTTONUP来判断
	{
		MSG message;
		DWORD st = GetTickCount();//记录下鼠标弹起时的时间
		while (1)
		{
			if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
			{
				if (message.message == WM_LBUTTONUP){//如果在100ms内,找到新的鼠标弹起的消息,则将消息为双击
					pMsg->message = WM_LBUTTONDBLCLK;//将会响应 OnLButtonDblClk 函数,该函数可在类向导中自动生成
					break;
				}
				else if (message.message == WM_LBUTTONDOWN){//如果收到鼠标按下消息,不做处理

				}
				else{
					//如果不是鼠标按下或弹起的消息,则将消息插进消息上队列重新分发
					::TranslateMessage(&message);
					::DispatchMessage(&message);
				}
				DWORD et = GetTickCount();//如果时间差超过100ms,则将此次点击当作单击处理
				if (et - st > 100){
					pMsg->message == WM_LBUTTONUP;
					break;;
				}
			}
		}

	}
	return __super::PreTranslateMessage(pMsg);
}


然后mfc就会响应OnLButtonDblClk函数(即WM_LBUTTONDBLCLK的映射函数)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值