2010-08-19 110 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