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的映射函数)

猜你喜欢

转载自blog.csdn.net/sspdfn/article/details/61922464