2012-12-19 2 views
0

J'essaye de créer un programme qui dessine des triangles/divers polygones à la fenêtre sur le clic de souris. J'ai l'application dessinant à la fenêtre mais je ne peux pas les faire repeindre quand la fenêtre est invalidée.Fonction de polygone dans GDI

J'ai juste essayé d'inclure la partie importante du code.

Le triangle temporaire sera plus grand/plus petit lorsque l'utilisateur déplace la souris. Quand ils lâchent le bouton gauche de la souris, le triangle est stocké dans la structure. Cette partie semble fonctionner correctement et les informations de chaque triangle sont stockées. Me rappelant que je n'utilise pas actuellement l'épaisseur ou les couleurs dans la structure.

typedef struct 
{ 

POINT pt[3]; 
unsigned int colour1; 
unsigned int colour2; 
unsigned int colour3; 
unsigned int thickness; 
unsigned int printOrder; 

}Triangles; 

Triangles temp_tri; 
Triangles triangle_store[MAX_OBJECTS]; 
int triCount = 0; 

case WM_LBUTTONDOWN: 

if(triButtonPressed) //Faulty Feature 
    { 
     mouse_down_x = LOWORD(lParam); 
     mouse_down_y = HIWORD(lParam); 

     temp_tri.pt[0].x = mouse_down_x; 
     temp_tri.pt[0].y = mouse_down_y; 

     mouse_down = true; 

    } 

case WM_MOUSEMOVE: 
if(triButtonPressed) 
    { 
     if(mouse_down) 
     { 
      temp_tri.pt[1].x= LOWORD(lParam); 
      temp_tri.pt[1].y = HIWORD(lParam); 
      temp_tri.pt[2].x= LOWORD(lParam) *2; 
      temp_tri.pt[2].y= HIWORD(lParam) *2; 

      InvalidateRect(hWnd,NULL,true); 
     } 
    } 

case WM_LBUTTONUP: 
else if(triButtonPressed) 
    { 
     temp_tri.pt[1].x = LOWORD(lParam); 
     temp_tri.pt[1].y = HIWORD(lParam); 
     temp_tri.pt[2].x= LOWORD(lParam) + 90; 
     temp_tri.pt[2].y = HIWORD(lParam) + 90; 
     printOrder++; 
     temp_tri.printOrder = printOrder; 
     triangle_store[triCount] = temp_tri; 
     triCount ++; 
     mouse_down = false; 
    } 

case WM_PAINT: 

for(int i =0; i<triCount; i++) 
     { 

      if(o == triangle_store[i].printOrder) 
      { 

       rePaintTriangles(backDC); 
      } 
     } 

if(triButtonPressed) 
    { 
     if(mouse_down) 
     { 
      triangle(backDC); 
     } 
    } 


void triangle(HDC hdc) 
{ 

POINT pt[3]; 

pt[0].x = temp_tri.pt[0].x; 
pt[0].y = temp_tri.pt[0].y; //Works fine. 
pt[1].x = temp_tri.pt[1].x; 
pt[1].y = temp_tri.pt[1].y; 
pt[2].x = temp_tri.pt[2].x; 
pt[2].y = temp_tri.pt[2].y; 

Polygon(hdc,pt,3); 
} 

void rePaintTriangles(HDC hdc) 
{ 


Polygon(hdc,triangle_store[triCount].pt,3); //Doesn't Work 

} 
+0

Quelle est la variable 'o' utilisée pour le test dans' WM_PAINT'? – 6502

Répondre

0

Lorsque vous recevez un message WM_PAINT, vous êtes censé appeler BeginPaint pour obtenir le HDC dans lequel vous devriez peinture.

+0

... et quand vous avez terminé, 'EndPaint' pour lui dire que le rectangle invalide est maintenant valide. –