2010-08-19 109 views
1

好吧我知道如何做鼠标左键按下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; 
} 
+0

你肯定看到101个呼叫WM_LBUTTONDOWN,还是在矢量只是101元? – 2010-08-19 23:52:43

+0

只有101个元素 – Ramilol 2010-08-19 23:53:18

+0

你有一个for(int i; i <100; ++ i){}循环的某个地方做了一些无意中的向量吗? – 2010-08-19 23:54:46

回答

1

OMG,这是我的错,我的缩放的矢量设置为100个elemnts对不起你们

2

没有任何理由,你为什么当你按下按钮一次通常会得到很多WM_LBUTTONDOWN事件。

也许你以前的case部分(处理一些其他消息)缺少break

+0

打我。 :) – 2010-08-19 23:49:45

+0

它没有丢失任何东西 – Ramilol 2010-08-19 23:50:14

0

你确定它的这个代码正在生成向量中的101项 - 在前的case(如果有的话)不缺少break;是什么呢?

+0

什么都没有丢失,没有休息缺失 – Ramilol 2010-08-19 23:50:37

0

你从窗口过程返回什么? WM_LBUTTONDOWN should return 0来表明邮件已被处理(如果您不这样做,您将继续收到邮件,直到它处理完毕)。

+0

它编译但仍然没有解决问题 – Ramilol 2010-08-20 00:00:45