GDI 中的多边形函数

Posted

技术标签:

【中文标题】GDI 中的多边形函数【英文标题】:Polygon function in GDI 【发布时间】:2012-12-19 22:17:47 【问题描述】:

我正在尝试创建一个在鼠标单击时将三角形/各种多边形绘制到窗口的程序。我有应用程序绘制到窗口,但当窗口无效时我无法让它们重新绘制。

我刚刚尝试包含代码的重要部分。

当用户移动鼠标时,临时三角形会变大/变小。当他们松开鼠标左键时,三角形存储在结构中。这部分似乎工作正常,并且存储了每个三角形的信息。请记住,我目前没有在结构中使用厚度或颜色。

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


【问题讨论】:

o 中用于测试的变量 WM_PAINT 是什么? 【参考方案1】:

当您收到 WM_PAINT 消息时,您应该致电 BeginPaint 以获取您应该在其中进行绘画的 HDC。

【讨论】:

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

以上是关于GDI 中的多边形函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GDI 将方形位图渲染为任意四边形多边形?

简述WPF中的画刷(Brush)

MFC:使用 GDI+ 绘制对话框边框

在 OpenGL 中重复纹理

Foxall 的 G 函数在 R spatstat 中具有多边形

matlab计算多边形面积polyarea函数