好的,我知道如何按下鼠标左键(WM_LBUTTONDOWN)。但我有一些麻烦。当它与矢量一起使用时,每当鼠标左键按下时,它似乎会增加101个元素。我认为每次鼠标按钮关闭时,它会向WM_LBUTTONDOWN发送101条消息,导致添加101个元素。 这是事件的代码
case WM_LBUTTONDOWN:
iRegularShots=0;
pt.x = GET_X_LPARAM(lParam);
pt.y = GET_Y_LPARAM(lParam);
pRegularShots.push_back(pt);
InvalidateRect(hWnd, rect, false);
break;
任何想法?
<小时/> 我不会错过休息;
VOID fRegularShot(HDC hdc, HWND hWnd)
{
Graphics graphics(hdc);
Image shot(L"RegularShots.png");
long index=0;
long s=pRegularShots.size();
while(index < (long)pRegularShots.size())
{
graphics.DrawImage(&shot, pRegularShots[index].x, pRegularShots[index].y);
++index;
}
}
windows prudocer
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
OnPaint(hdc, hWnd, 1);
if(iRegularShots==0)
{
fRegularShot(hdc, hWnd);
}
EndPaint(hWnd, &ps);
break;
case WM_LBUTTONDOWN:
iRegularShots=0;
pt.x = GET_X_LPARAM(lParam);
pt.y = GET_Y_LPARAM(lParam);
pRegularShots.push_back(pt);
InvalidateRect(hWnd, rect, false);
return 0;
break;
case WM_LBUTTONUP:
iRegularShots=1;
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
答案 0 :(得分:2)
当您按一下按钮时,没有任何理由通常会收到很多WM_LBUTTONDOWN事件。
也许您以前的case
部分(处理其他一些消息)缺少break
?
答案 1 :(得分:1)
omg这是我的错,我将矢量设置为100个元素对不起家伙
答案 2 :(得分:0)
你确定这个代码在向量中生成了101个条目 - 前面的case
(如果有的话)没有丢失break;
是不是?
答案 3 :(得分:0)
你从窗口程序中返回什么? WM_LBUTTONDOWN should return 0表示邮件已被处理(如果您没有,则会在处理之前继续收到邮件)。