VC6.0 MFC 模拟弹簧运动(改进版)

一、内容描述

运用VC6.0新建工程MFC AppWizard(exe),创建单文档应用程序,画一个弹簧(用矩形代替),下面挂有重物(用圆代替),设定重物质量和弹簧的弹性系数,模拟弹簧运动,可通过设置对话框来改变弹簧的一些基本参数,并实时绘制运动轨迹曲线图。
**源码链接:https://download.csdn.net/download/qq_46649692/16587973**

二、最终实现效果图

三、实现步骤(详细教程)

1、新建一个工程,取名“SpringSimulation”。

2、选择“单文档(S)”,点击“完成”,“确定”。

3、新建一个类

4、添加成员变量

5、构造函数里对变量初始化

代码如下

CTanHuang::CTanHuang()
{m_YD.x = 200;m_YD.y = 50;m_kx = 200/0.2;m_ky = -200/0.2;m_K = 10.0;m_L = 0.2;m_l = 0.2;m_m = 0.1;m_Nv = 0;m_Nl = 0;m_v = 0.0;
}

6、添加成员函数Draw(CDC *p)

代码如下

void CTanHuang::Draw(CDC *p)
{pDC = p;int i;int x,y,x1,y1;int r = 20;//画最上面悬挂弹簧的线x = m_YD.x - 50;y = m_YD.y;pDC->MoveTo(x,y);x = m_YD.x + 50;pDC->LineTo(x,y);x = m_YD.x;y = m_YD.y;pDC->MoveTo(x,y);y = m_YD.y + 30;pDC->LineTo(x,y);//画弹簧x = m_YD.x - 20;x1 = m_YD.x + 20;y1 = y - m_l * m_ky;pDC->Rectangle(x,y,x1,y1);//画弹簧与重物之间的线x = m_YD.x;y = y1;pDC->MoveTo(x,y);y += 20;pDC->LineTo(x,y);//画重物y += r;pDC->Ellipse(x-r,y-r,x+r,y+r);//画曲线坐标轴x = m_YD.x + 200;y = m_YD.y;pDC->MoveTo(x,y);y += 300;pDC->LineTo(x,y);x += 300;pDC->LineTo(x,y);//画曲线x = m_YD.x + 200;y = m_YD.y + 300;pDC->MoveTo(x,y);for(i = 0; i < m_Nl; i++){   x = m_YD.x + 200 +  3 * i;y = m_YD.y + 300 + m_nl[i] * m_ky;pDC->LineTo(x,y);  }//计算弹簧长度m_nl[m_Nl] = m_l - m_L;m_Nl++;
}

7、添加成员函数Move(float DeltaT)

代码如下

void CTanHuang::Move(float DeltaT)
{float f,a,zn;zn = 0.1 * fabs(m_v) * m_v;//记得嵌入#include "math.h"头文件f = (m_l - m_L) * m_K - 9.8 * m_m - zn;a = f/m_m;m_v += a * DeltaT;m_v *= 0.9;m_l -= m_v * DeltaT;
}

8、设置菜单


鼠标单击“开始”,鼠标右击,选择“建立类向导…”,如下图所示。(“暂停”、“设置”操作同“开始”)

9、添加窗口消息句柄

10、引入#include "TanHuang.h"头文件

11、在OnTimer里调用

void CSpringSimulationView::OnTimer(UINT nIDEvent)
{// TODO: Add your message handler code here and/or call defaultm_TanHuang.Move(0.1);Invalidate(TRUE);CView::OnTimer(nIDEvent);
}

12、在OnDraw里调用

void CSpringSimulationView::OnDraw(CDC* pDC)
{CSpringSimulationDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data herem_TanHuang.Draw(pDC);
}

13、在OnMStartSpring(),OnMPauseSpring() 里调用时钟函数

void CSpringSimulationView::OnMStartSpring()
{// TODO: Add your command handler code hereSetTimer(1,100,NULL);
}void CSpringSimulationView::OnMPauseSpring()
{// TODO: Add your command handler code hereKillTimer(1);
}

14、编译运行初步效果图

15、新建对话框,设置弹簧参数

16、编辑对话框

17、建立类向导


18、添加成员变量

19、在OnMSetSpring()里传递对话框参数

代码如下

void CSpringSimulationView::OnMSetSpring()
{// TODO: Add your command handler code hereCDlg_Set_Spring dlg;//记得引入#include "Dlg_Set_Spring.h"头文件dlg.m_YD_X = m_TanHuang.m_YD.x;dlg.m_YD_Y = m_TanHuang.m_YD.y;dlg.m_L = m_TanHuang.m_L;dlg.m_K = m_TanHuang.m_K;dlg.m_m = m_TanHuang.m_m;dlg.m_v = m_TanHuang.m_v;UpdateData(FALSE);if (dlg.DoModal() == IDOK){m_TanHuang.m_YD.x = dlg.m_YD_X;m_TanHuang.m_YD.y = dlg.m_YD_Y;m_TanHuang.m_L = dlg.m_L;m_TanHuang.m_K = dlg.m_K;m_TanHuang.m_m = dlg.m_m;m_TanHuang.m_v = dlg.m_v;Invalidate(TRUE);}
}

20、最终效果

可以通过对话框来设置一些基本参数。

VC6.0 MFC 模拟弹簧运动(改进版)相关推荐

  1. vc6.0 mfc一些函数明明调用语法正确,但是提示函数或者函数参数未定义等问题解决方法。

    使用vc6.0 mfc 编写程序时一些函数在正常声明.调用的情况下提示函数参数未定义等问题时 如调用EnumDisplayMonitors()会提示下面问题 运行后,出现以下问题: Compiling ...

  2. VC6.0 MFC 列表框 列表控件 添加 修改 删除

    VC6.0 MFC 列表框 列表控件 添加 修改 删除 写在前面:列表框是很常用,并且很重要的一个控件,那么接下来,就跟随我的脚步,去探索它的奥秘吧! 一.未卜先知 1.编译运行后,点击"学 ...

  3. VC6.0 MFC 时钟运动 调用对话框设置时间

    时钟运动 源码下载链接(免费) 问题描述 在VC6.0的MFC中画一个钟表,有时针.分针.秒针,并实现时针.分针.秒针的运动. 最终部分静态效果图如下: 操作详细过程 1.新建 1.打开VC6.0,点 ...

  4. VC6.0 MFC 单文档 机器人巡检

    机器人巡检 一.整体框架 主要包括三个类:场景类(CChangJing):机器人类(小车(CCar).无人机(CWuRenJi)):煤气泄露类(CMeiQiXieLou). 二.场景类 目标主要是数据 ...

  5. VC6.0++ MFC多线程运行

    Windows中没有多进程的概念,只有多线程. 在MFC中一般使用AfxBeginThread来启动工作者线程,用新建类,然后new这个类后调用CreateThread方法来启动界面线程. 工作者线程 ...

  6. VC6.0 MFC 单文档 五子棋游戏 基础入门

    五子棋游戏 一.整体思路 1.目的:通过五子棋,掌握面向对象的思想,这是我们的目的.提升分析问题.解决问题的能力,在做项目之前要有一个系统的思路,第一步干什么,第二步干什么-- 2.思路:拿到这个问题 ...

  7. VC6.0读取Excel文件数据

    VC6.0读取Excel文件数据 文件存储在Excel文件中,因此第一步是能够在程序中方便地读取表格数据,这里用的是VC6.0 MFC.文章内容仅供参考,程序不完整. 完整的VC6.0相关程序,需要的 ...

  8. VC6.0编写BHO #error : WINDOWS.H already included. MFC apps must not #include windows.h

    VC6.0编写BHO #error :  WINDOWS.H already included.  MFC apps must not #include <windows.h> 在StdA ...

  9. 在MFC中如何自定义消息及相应事件(VC6.0及VS2005)

    在MFC中如何自定义消息及相应事件(VC6.0及VS2005) 2012-01-01 16:42:18|  分类: VS2005&VC++ |  标签:自定义消息  message   |字号 ...

最新文章

  1. 基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例
  2. oracle crs 不能启动,oracle 10g crs 不能启动问题解决案例
  3. python判断字符大小写转换_Python 字符串大小写转换的简单实例
  4. C# 使用Timer控件设置时间间隔
  5. 12对胸椎对应体表标志_铁路信号之信号表示器及标志(三)
  6. easyUI 运用窗口和form表单制作导出功能
  7. 叉叉框架_叉/连接框架
  8. 修改NavigationBar的分根线颜色
  9. Postgresql时间处理
  10. mysql数据库访问组件_mysql数据库访问组件
  11. 集群节点数和分片数关系_Elasticsearch最佳实践之分片使用优化
  12. Jsoup解析网页html
  13. 阶段3 2.Spring_03.Spring的 IOC 和 DI_9 spring的依赖注入
  14. Excel曲线拟合的精度问题
  15. git使用vimdiff模式比对代码
  16. OutMan——Foundation框架中的集合类(一)(二)
  17. 如何在新浪微博中批量取消关注
  18. ping 命令的实现
  19. hihocoder买零食
  20. Html上传文件php处理上传文件

热门文章

  1. 蓝桥杯真题:三羊献瑞
  2. 子网掩码,CIDR前缀法表示掩码
  3. 走钢索的人---走出软件作坊:三五个人十来条枪 如何成为开发正规军(十七)
  4. BERT模型从训练到部署
  5. linux基础命令 - ps
  6. 智能家居中物联网技术的应用
  7. tikz包 安装_TeX系列: tikz pgf 宏包安装步骤
  8. Docker笔记-04 仓库
  9. spring-boot-starter-parent作用及测试
  10. 嵌入式C++开发详解