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 中的多边形函数的主要内容,如果未能解决你的问题,请参考以下文章