【发布时间】:2010-08-19 23:41:13
【问题描述】:
好的,我知道如何使用鼠标左键按下 evet(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;
有什么想法吗?
我没有错过休息时间;
我使用了 size() 函数来告诉我分配了多少元素。
我设置了两个断点一个一个 pRegularShots.push_back(pt);另一个是不同的函数,它将使用向量内部的内容来显示图像。我在那边接到了 101 个电话,但 pRegularShots.push_back(pt);.
上只有一个电话 这是功能代码
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 审慎者
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;
}
【问题讨论】:
-
您确定看到对 WM_LBUTTONDOWN 的 101 次调用,还是向量中只有 101 个元素?
-
你是否有一个 for(int i; i
-
你能发布你的整个窗口过程吗?
-
现在我有了 while 循环,你可以在我的帖子中看到它,我只是编辑它
-
我发了你可以看看
标签: c++ events visual-c++ winapi