好吧我知道如何做鼠標左鍵按下evet(WM_LBUTTONDOWN)。但即時通訊有一些麻煩。當與矢量一起使用時,每當鼠標左鍵失效時,它似乎會添加101個元素。我認爲每次鼠標按鈕關閉時,它都會向101發送101個消息給WM_LBUTTONDOWN,從而導致添加101個元素。 這裏是事件C++鼠標左鍵按下幫助
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;
任何想法的代碼?
即時通訊不失蹤;
我用teh 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;
}
}
窗口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;
}
你肯定看到101個呼叫WM_LBUTTONDOWN,還是在矢量只是101元? – 2010-08-19 23:52:43
只有101個元素 – Ramilol 2010-08-19 23:53:18
你有一個for(int i; i <100; ++ i){}循環的某個地方做了一些無意中的向量嗎? – 2010-08-19 23:54:46