b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

响应鼠标前,会先产生一个单击鼠标消息

电脑杂谈  发布时间:2021-05-06 07:02:32  来源:网络整理

今天我做了老师留下的作业问题。一个错误地出现了一个错误,然后我发现这是MFC消息处理机制的问题。在响应双击之前,将生成鼠标单击消息。这是我的解决方法。

点击回复:

void CMouseView::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值
	MSG message;
	//CString str1;
	//CString str2;
	//str1.Format(_T("%ld"), point.x);
	//str2.Format(_T("%ld"), point.y);
	DWORD st = GetTickCount();
	while (1)
	{
		if (PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
		{
			TranslateMessage(&message);
			DispatchMessage(&message);
			if (message.message == WM_LBUTTONDBLCLK)
			{
			/*	if (num != 5)
				{
					num++;
					MessageBox(_T("(") + str1 + _T(",") + str2 + _T(")"));
					break;
				}
				else*/
					break;
			}
		}
		DWORD et = GetTickCount();
		if (et - st > 200)
		{
			num = 0;
			MessageBox(_T("one"));
			break;
		}
	}
	CView::OnLButtonDown(nFlags, point);
}

mfc 鼠标双击_mfc 消息钩子_mfc鼠标双击消息

双击以回复:

void CMouseView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
	CString str1;
	CString str2;
	str1.Format(_T("%ld"), point.x);
	str2.Format(_T("%ld"), point.y);
	CString str3;
	str3.Format(_T("%ld"), num+1);
	// TODO:  在此添加消息处理程序代码和/或调用默认值
	if (num != 5)
	{
		num++;
		MessageBox(_T("第")+str3+_T("次")+_T("(") + str1 + _T(",") + str2 + _T(")"));
		//break;
	}
	CView::OnLButtonDblClk(nFlags, point);
}

其中

PeekMessage(&message, NULL, 0, 0, PM_REMOVE)

用于在消息队列中获取消息

TranslateMessage(&message);
DispatchMessage(&message);

用于解释和重新分发消息。当然,您不能重新分配它。

一键即可获得响应。

具体思路是始终获取消息队列中的消息,以确定200毫秒后是否未收到双击消息。

我们仅执行点击响应。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-373393-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...