MFC第2天——绘制太极图
2022-09-14
MFC 绘制太极图
效果图:
步骤:
先创建一个MFC项目,打开VS,点击“新建”,后点击“项目”,找到“MFC应用”,修改项目名称,修改项目存储的位置。
点击“下一步”,“应用程序类型”选择“单个文档”,右边的“项目样式”选择“MFC standard”。点击“完成”。
点击“解决方案资源管理器”中的“源文件”,找到有一个是“xxx(项目名称)View.cpp”的文件,点击。
在该源文件中找到“OnDraw”函数,将该函数右边括号里面参数的注释去掉。在“return”语句下面编写代码。
OnDraw函数代码:
1 void CdiagramView::OnDraw(CDC* pDC) 2 { 3 CdiagramDoc* pDoc = GetDocument(); 4 ASSERT_VALID(pDoc); 5 if (!pDoc) 6 return; 7 8 // TODO: 在此处为本机数据添加绘制代码 9 CBrush blackBrush, whiteBrush; 10 CPen blackPen, whitePen; 11 blackPen.CreatePen(PS_SOLID | PS_COSMETIC, 1, RGB(0,0,0)); 12 whitePen.CreatePen(PS_SOLID | PS_COSMETIC, 1, RGB(255,255,255)); 13 14 blackBrush.CreateSolidBrush(RGB(0, 0, 0)); 15 whiteBrush.CreateSolidBrush(RGB(255,255,255)); 16 17 CBrush *oldBrush = pDC->SelectObject(&blackBrush); 18 CPen *oldPen = pDC->SelectObject(&blackPen); 19 CRect rect(100, 100, 400, 400); 20 21 pDC->Pie(&rect, CPoint(100,250),CPoint(400,250)); 22 23 24 pDC->SelectObject(&whiteBrush); 25 pDC->SelectObject(&blackPen); 26 27 pDC->Pie(&rect, CPoint(400, 250), CPoint(100, 250)); 28 pDC->SelectObject(&blackBrush); 29 pDC->SelectObject(&blackPen); 30 pDC->Ellipse(100, 175, 250, 325); 31 32 pDC->SelectObject(&whiteBrush); 33 pDC->SelectObject(&whitePen); 34 35 pDC->Ellipse(250, 175, 400, 325); 36 pDC->Ellipse(165,240,185,260); 37 38 pDC->SelectObject(&blackBrush); 39 pDC->SelectObject(&blackPen); 40 pDC->Ellipse(315, 240, 335, 260); 41 42 pDC->SelectObject(oldPen); 43 pDC->SelectObject(oldBrush); 44 45 }
说明:
第9行和第10行定义了一个黑白画刷和画笔。第11行和第12行为定义的黑白画笔赋值,里面传的参数表示对创建的画笔的要求,“PS_SOLID”表示实线,“PS_COSMETIC”表示画笔的一种类型——“装饰画笔”,“1”表示画笔的宽度,最后一个参数表示画笔的颜色。
第14和15行表名为创建的画刷赋颜色,白色RGB(255,255,255),黑色RGB(0,0,0)。第17行和第18行作用是将上面创建的黑色的画笔和画刷通过“SelectObject”选入设备环境中,即使用该画刷、画笔在显示器上显示。使用&应该是找到画刷、画笔创建的内存地址。
第19行矩形的四个参数分别为左上角x轴坐标、y轴坐标和右下角x、y坐标。
第21行中Pie函数的参数(&rect, CPoint(100,250),CPoint(400,250))表示在rect矩形中找到后面两个点,连接通过两个点的弧线,由第24,25行代码可知,使用黑笔进行绘制线框(只有弧线),使用白色画刷粉刷两个点直接的弧线与两个点直接连接的这个部分。
第27行代码表示,选中大圆下面的部分。第28和29行表示使用黑色画笔、黑色画刷对下半部分进行操作。
第30行,Ellipse的四个参数代表构成该椭圆的外切矩形的左上角的x坐标、y坐标,右下角的x、y坐标。该行代码表示用第28行和29行中提供的黑色画刷和黑色画笔进行填充左边的中型圆(见下面的分析图)。
第32行和33行将白色画刷和白色画笔选入dc(设备环境)。
第35行表示使用白色画刷和白色画笔绘制右边中型圆。
第36行表示使用白色画刷和白色画笔绘制左边小型圆。
第38行和39行将黑色画刷和黑色画笔选入dc(设备环境)。
第40行使用刚刚选入dc的画刷和画笔绘制右边的小圆。
第42行和43行代码 表示在使用完新的画笔和画刷后,将原来设备中的画刷和画笔恢复原状。
分析图:
总结:
创建一个太极图,首先用黑色画笔创建一个大圆,在大圆的x中轴线创建两个相同的中型圆,使用Pie画出轮廓,上述图中,将太极图的偏下面一部分刷为黑色,上部分刷为白色。再在大圆的中轴线上创建两个小圆。一个刷为黑色,一个刷为白色。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性