欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > MFC图形函数学习11——路径层函数

MFC图形函数学习11——路径层函数

2025/2/25 0:36:15 来源:https://blog.csdn.net/m0_72128260/article/details/144066435  浏览:    关键词:MFC图形函数学习11——路径层函数

一、关于路径层函数
       路径层函数的功能是对使用MoveTo、LineTo函数绘制的封闭图形填充颜色。它不是一个单独的函数,而是由两个函数构成,使用时还需要其它函数的配合。
(1)打开路径层函数
       原型:BOOL BeginPath();
       参数:无
       返回值:调用成功返回非0数(真),失败返回0(假)。
(2)关闭路径层函数
       原型:BOOL EndPath();
       参数:无
       返回值:调用成功返回非0数,失败返回0
(3)填充/绘制边框并填充路径层函数
       原型1:BOOL FillPath(); //此函数仅进行填充,需要画刷,画笔在这里不上用
       参数:无
       返回值:填充成功返回非0数,失败返回0
       原型2:BOOL StrokeAndFillPath();//此函数进行填充并画出边框,画笔画刷均需要
       参数:无
       返回值:绘制边框并填充成功返回非0数,失败返回0
(4)说明
       a.以上函数均是CDC类成员函数,使用时需要CDC类对象或指针调用。
       b.路径层函数的使用方法:第一步是执行打开路径层函数;第二步是调用MoveTo、LineTo函数绘制封闭图形;第三步是执行关闭路径层函数;第四步是执行填充 / 绘制边框并填充函数。在调用填充 / 绘制边框并填充函数前,需要提前定义画刷 / 画笔与画刷。
       c.一对路径层函数后面再跟一对路径层函数,然后一次性调用填充函数,则填充函数只对后一对路径层函数进行填充;对前一对路径层函数无效。
      d.在两个路径层函数之间利用LineTo函数绘图时,最后一条线可以不画,函数会自动封闭。
二、使用路径层函数绘图案例
     题目:在自定义坐标系中,绘制两个菱形,菱形竖直对角线长度为窗口高的60%,水平对角线长度为窗口宽度的30%;两个菱形竖直对角线分别位于窗口左、右半部分的中心,水平对角线与Y轴重合。左边菱形无边框填充蓝色,右边菱形绿色边框填充红色。
     代码及注释如下:

//一、自定义坐标系CRect rect;GetClientRect(rect);pDC->SetMapMode(MM_ANISOTROPIC); pDC->SetWindowExt(rect.Width(), rect.Height()); pDC->SetViewportExt(rect.Width(), -rect.Height()); pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);
//二、定义左侧菱形的顶点坐标CPoint p[4]; //声明CPoint对象p[0].x = -rect.Width() / 4; //p[0]上顶点p[0].y = rect.Height() * 0.6 / 2;p[1].x = -rect.Width() / 4 - rect.Width() * 0.3 / 2;//p[1]左顶点p[1].y = 0;p[2].x = -rect.Width() / 4; //下顶点p[2].y = -rect.Height() * 0.6 / 2;p[3].x = -rect.Width() / 4 + rect.Width() * 0.3 / 2; //右顶点p[3].y = 0;
//三、绘制左侧菱形并进行填充pDC->BeginPath(); //路径层开始pDC->MoveTo(p[0]); //绘图pDC->LineTo(p[1]);pDC->LineTo(p[2]);pDC->LineTo(p[3]);pDC->LineTo(p[0]);pDC->EndPath(); //路径层结束CBrush blueBrush(0xff0000); //定义蓝色画刷CBrush* oldBrush = pDC->SelectObject(&blueBrush); //选入画刷pDC->FillPath();//填充路径层pDC->SelectObject(oldBrush); //恢复缺省画刷
//四、定义右侧菱形顶点坐标p[0].x = rect.Width() / 4;p[0].y = rect.Height() * 0.6 / 2;p[1].x = rect.Width() / 4 - rect.Width() * 0.3 / 2;p[1].y = 0;p[2].x = rect.Width() / 4;p[2].y = -rect.Height() * 0.6 / 2;p[3].x = rect.Width() / 4 + rect.Width() * 0.3 / 2;p[3].y = 0;
//五、绘制右侧菱形并填充、画边框pDC->BeginPath();pDC->MoveTo(p[0]);pDC->LineTo(p[1]);pDC->LineTo(p[2]);pDC->LineTo(p[3]);pDC->LineTo(p[0]);pDC->EndPath();CPen redPen(PS_SOLID, 2, 0x0000ff); //定义红色画笔CPen* oldPen = pDC->SelectObject(&redPen);//选入画笔CBrush greenBrush(0x00ff00);oldBrush = pDC->SelectObject(&greenBrush);pDC->StrokeAndFillPath(); //填充路径层并画边框pDC->SelectObject(oldBrush);pDC->SelectObject(oldPen);

运行结果截图:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词