今天我做了老师留下的作业问题。一个错误地出现了一个错误,然后我发现这是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);
}
双击以回复:
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
混乱继续进行下去