MFC(5):动态五角星绘制小练习
需求说明:绘制一个五角星,界面有三个按钮,分别为“大”、“中”、“小”;点击相应的按钮,五角星会发生变化
解决思路:在五角星的外接圆上,选择五个等分点作为五角星的五个顶点;根据相邻点不相连的原则,构建五角星的五个顶点;基于外接圆半径大小控制画出五角星的大小
程序实现:
(1)创建对话框应用程序DrawPentagram;CTRL + A删除对话框中的默认按钮
(2)拖拽三个按钮,Caption属性分别设置为“大”、“中”、“小”;ID设置为IDC_BIG、IDC_MIDDLE和IDC_SMALL
(3)在DrawPentagramDlg.h头文件中,添加绘制五角星的函数声明:
//绘制空心五角星函数void DrawHollowPentagram(double radius);//绘制实心五角星void DrawSolidPentagram(double radius);
(4)在DrawPentagramDlg.cpp文件中添加绘制五角星的函数实现
//空心五角星的实现void CDrawPentagramDlg::DrawHollowPentagram(double radius)
{//定义五角星的五个点的坐标的数组CPoint pts[5];//创建画笔工具CDC *pDC = GetDC();//根据外接圆半径计算每个顶点的坐标for(int i = 0; i < 5; i++){pts[i].x = (long)(150 - radius * sin((i * 72 + 36) * 2 * 3 * 3.14 / 360));pts[i].y = (long)(150 + radius * cos((i * 72 + 36) * 2 * 3 * 3.14 / 360));}//首先将画笔移动到第一个点,将其与第二个点连接for(int i = 0; i < 5; i++){pDC->MoveTo(pts[i]); //线段起点pDC->LineTo(pts[(i + 2) % 5]); //线段终点}
}
//实心五角星的实现
void CDrawPentagramDlg::DrawSolidPentagram(double radius)
{CDC *pDC = GetDC();CPen penBlue(PS_SOLID, 2, RGB(0, 0, 255)); //创建蓝色画笔CPen *pOldPen = pDC->SelectObject(&penBlue);//将画笔与DC关联CBrush brushRed(RGB(0, 0, 255)); //创建蓝色画刷CBrush *pOldBrush = pDC->SelectObject(&brushRed);//将画刷与DC关联pDC->SetPolyFillMode(WINDING); //设置填充色CPoint pts[5];for(int i = 0; i < 5; i++){pts[i].x = (long)(150 - radius * cos((i * 144 - 18) * 3.14 / 180));pts[i].y = (long)(150 + radius * sin((i * 144 - 18) * 3.14 / 180));}//根据五个定点绘制多边形(五角星的外轮廓)CPoint v[5] = {pts[0], pts[1], pts[2], pts[3], pts[4]};pDC->Polygon(v, 5);//恢复画笔和画刷工具pDC->SelectObject(pOldPen);pDC->SelectObject(pOldBrush);
}
(5)按钮的设计
//大五角星的绘制
void CDrawPentagramDlg::OnBnClickedBig()
{//设置外接圆半径this->Invalidate();this->UpdateWindow();double radius = 100;DrawHollowPentagram(radius);//DrawSolidPentagram(radius);
}//中五角星的绘制
void CDrawPentagramDlg::OnBnClickedMiddle()
{// TODO: 在此添加控件通知处理程序代码this->Invalidate();this->UpdateWindow();double radius = 75;//DrawHollowPentagram(radius);DrawSolidPentagram(radius);
}//小五角星的绘制
void CDrawPentagramDlg::OnBnClickedSmall()
{// TODO: 在此添加控件通知处理程序代码this->Invalidate();this->UpdateWindow();double radius = 50;//DrawHollowPentagram(radius);DrawSolidPentagram(radius);
}
(6)程序效果图
(7)小结
熟悉绘图API的使用,了解五角星的构成原理,把握五个定点的连接方式
MFC(5):动态五角星绘制小练习相关推荐
- 几行代码完成动态图表绘制 | Python实战
作者 | 小F 来源 | 法纳斯特 头图 | CSDN下载自视觉中国 关于动态条形图,小F以前推荐过「Bar Chart Race」这个库.三行代码就能实现动态条形图的绘制. 有些同学在使用的时候,会 ...
- MFC学习中遇到的小问题和解决方案
MFC学习中遇到的小问题和解决方案 1 清除combox里面的内容 ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除现有所有 ...
- (一)QCustomPlot常见属性设置、多曲线绘制、动态曲线绘制、生成游标、矩形放大等功能实现
系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)QCustomPlot常见属性设置.多曲线绘制.动态曲线绘制.生成游标.矩形放大等功能实现 第二章: (二)QCustomPlot ...
- 基于 C++ OpenGL框架实现五角星绘制【100010595】
实验目的和要求 学会配置GLUT开发库并使用Visual Studio C++开发OpenGL程序. 实验内容和原理 在Windows系统中,配置GLUT库:解压并打开文件夹glut.zip,取出gl ...
- MFC中动态创建控件以及事件响应实现方法
本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...
- Win10 UWP开发中的重复性静态UI绘制小技巧 1
Win10 UWP开发中的重复性静态UI绘制小技巧 1 原文:Win10 UWP开发中的重复性静态UI绘制小技巧 1 介绍 在Windows 10 UWP界面实现的过程中,有时会遇到一些重复性的.静态 ...
- 使用canvas绘制小程序码
场景:使用小程序文档的API可以获取带参数的二维码和小程序码,但是小程序码中的图片默认都是小程序的头像(红框中的图片).现在我们需要替换里面的图片,然后将小程序码保存成一张图片存入相册. 1.获取带参 ...
- MFC中动态数组CArray的使用
MFC中动态数组CArray的使用 2010-04-27 10:21 数组--这个C语言中的怪物,自从被直接继承到C++中,便让无数有识之士们前赴后继.绞尽脑汁,试图寻找一种可以动态增长的替代数据类型 ...
- MFC中动态创建控件以及添加事件响应
本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...
最新文章
- android fragment activity 交互,Android基础之Fragment与Activity交互详解
- 细节决胜 盘点IBM x86平台虚拟化优势
- Spring自动扫描组件
- 概率论面试系列第一弹: 贝叶斯公式
- Struts Gossip: 模組化程式
- MySQL JDBC驱动程序如何处理准备好的语句
- Kotlin AAPT: error: resource android:attr/lStar not found.
- MongoDB可视化界面工具Studio3T的安装 - 讲解篇
- 构建微服务(Building Microservices)-PDF 文档
- The Linux Storage Stack Diagram
- 程序员摆脱疲劳的 11 个建议
- 关于SWAT模型的一些原理(一)
- 语言表达的6c原则是指什么,2016年商务英语初级写作6C原则
- DHCP工作原理和报文格式
- MAC 扩展屏,颜色描述文件
- vue 防止多次点击重复提交v-preventReClick
- 【SpringBoot】banner在线生成网站
- 【我参加NVIDIA Sky Hackathon】ASR篇
- 盘点闪电网络将在2020年爆发的九大理由
- Facebook创始人
热门文章
- java 找不到字体_从Java中的TTF文件加载一些TrueType字体会导致FontFormatException:找不到字体名称...
- 100%准确“预测”涨停股的Java程序
- Impala 代替 hive COLLECT_SET函数的方式
- 转:在线检测网页错误工具
- 计算机基础知识 导读,计算机基础知识——图文混排教学教案.ppt
- 剪枝与重参第二课:修剪方法和稀疏训练
- Bark域介绍和线性频率域转换到Bark域
- 蓝桥杯——x星球甲壳虫车队进检查站
- 车队仿真软件Plexe-sumo仿真初探 plexe-python接口
- oracle和mysql的安装_Windows下Oracle的下载与安装