2012-12-19 36 views
0

我想创建一个程序,在鼠标单击时将三角形/各种多边形绘制到窗口上。我将应用程序绘制到窗口中,但当窗口失效时,我无法重新绘制它们。GDI中的多边形功能

我只是试图包括代码的重要部分。

当用户移动鼠标时,温度三角形将变大/变小。当他们放开鼠标左键时,三角形被存储在结构中。这部分似乎工作正常,每个三角形的信息都存储。考虑到我目前没有使用厚度或结构中的颜色。

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

用于'WM_PAINT'测试的变量'o'是什么? – 6502

回答

0

当您收到WM_PAINT消息,你应该叫BeginPaint进入你应该画HDC。

+0

......当你完成后,'EndPaint'告诉它以前无效的矩形现在是有效的。 –

相关问题