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画出轮廓,上述图中,将太极图的偏下面一部分刷为黑色,上部分刷为白色。再在大圆的中轴线上创建两个小圆。一个刷为黑色,一个刷为白色。

       

 

posted @   努力是一种常态  阅读(408)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示