2010-08-19 8 views
1

ok je sais comment faire le bouton gauche de la souris sur evet (WM_LBUTTONDOWN). mais j'ai quelques problèmes avec ça. quand on l'utilise avec des vecteurs, il semble ajouter 101 elemnts chaque fois que le bouton gauche de la souris est enfoncé. Je pense que chaque fois que le bouton de la souris est enfoncé, il envoie 101 messages à WM_LBUTTONDOWN qui entraîne l'ajout de 101 éléments. voici le code pour l'événementC++ bouton gauche de la souris vers le bas aide

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; 

des idées?


je ne manque pas de pause;
J'ai utilisé la fonction size() pour me dire combien d'élus ont été attribués.
J'ai mis deux points de rupture un un pRegularShots.push_back (pt); et l'autre sur une fonction différente qui utilisera ce qui est à l'intérieur du vecteur pour afficher l'image. et j'ai reçu 101 appels là-bas, mais un seul appel sur le pRegularShots.push_back (pt) ;.
c'est le code de fonction

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; 
    } 
} 
fenêtres

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

Voyez-vous vraiment 101 appels à WM_LBUTTONDOWN, ou seulement 101 éléments dans le vecteur? –

+0

juste 101 elemnts – Ramilol

+0

Avez-vous une boucle for (int i; i <100; ++ i) {} quelque part qui fait quelque chose d'involontaire au vecteur? –

Répondre

1

omg était de ma faute, je mis la vetor 100 elemnts désolé les gars

2

Il n'y a aucune raison pour laquelle vous auriez normalement obtenir beaucoup d'événements WM_LBUTTONDOWN lorsque vous appuyez sur le bouton une fois.

Peut-être que votre précédente section case (qui gère un autre message) manque break? Etes-vous sûr que c'est ce code qui génère les 101 entrées dans le vecteur - le précédent case (s'il y en a un) ne manque pas un break; est-ce le

+0

Battez-moi à elle. :) –

+0

il ne manque rien – Ramilol

0

+0

rien ne manque, pas de ruptures sont manquantes – Ramilol

0

Que revenez-vous de la procédure de la fenêtre? WM_LBUTTONDOWN should return 0 pour indiquer que le message a été traité (si vous ne le faites pas, vous continuerez à recevoir le message jusqu'à ce qu'il soit traité).

+0

il compilé, mais n'a toujours pas résolu le problème – Ramilol

Questions connexes