软件开发与实践报告

上传人:cn****1 文档编号:487807394 上传时间:2023-08-18 格式:DOC 页数:12 大小:69.02KB
返回 下载 相关 举报
软件开发与实践报告_第1页
第1页 / 共12页
软件开发与实践报告_第2页
第2页 / 共12页
软件开发与实践报告_第3页
第3页 / 共12页
软件开发与实践报告_第4页
第4页 / 共12页
软件开发与实践报告_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《软件开发与实践报告》由会员分享,可在线阅读,更多相关《软件开发与实践报告(12页珍藏版)》请在金锄头文库上搜索。

1、实 验 报 告2015 2016 学年 第 二 学期实 验 课 程 软件开发与实践学 生 姓 名*实 验 项 目时钟GUI控件学 院计算机科学技术学院实 验 性 质上机实验班 级 学 号*实 验 地 点研1213同 组 人 数第 组实 验 日 期第 周 星期 第 节成 绩环 境 参 数一、 实验目的及要求二、实验原理、实验内容三、实验仪器设备及材料四、操作方法与实验步骤五、实验数据记录及处理六、 实验结果分析及讨论一、实验目的及要求设计一个时钟GUI控件,控件包括一个表盘(表盘边缘上有60条细刻度线12条出粗刻度线)以及时分秒针,控件能自动读取当前系统时间,并以时分秒的形式显示。控件每秒读取一

2、次计算机系统时间,并完成时钟指针的显示更新。在GUI应用程序中可以利用时钟控件创建多个时钟实例,并显示在应用程序的窗口界面程序设计报告:word文档,在程序设计报告中需要详细的写出时钟控件的设计思想,画出主要的类图,活动图以及重要子函数的的程序流程图,并以附录的形式给出完整代码二、 实验原理、实验内容主要问题: 1.首先想到的是如何绘制指针式的图形时钟,通过查询资料可知,要在Cwnd基类下创建Windows子窗口,然后从此继承一个类,在派生类中实现消息处理成员函数和消息映射,以指定当消息被发送到窗口时应该如何动作。 2.程序调试时,出现以下错误:unresolved external symb

3、ol _endthreadex,错误现象具体为:nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol _endthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved externalsymbol _beginthreadexDebug/jnHid.exe:fatal error LNK1120:2 unresolved externalsError executing link.exe.错误提示为:nafxcwd.lib(thrdcore.o

4、bj) : error LNK2001: unresolved external symbol _endthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol _beginthreadexlibcd.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainDebug/Hello.exe : fatal error LNK1120: 3 unresolved externals通过查询资料后可知,解决步骤如下;1.在VC+6.0

5、编译环境中进行下列操作:“Project”-“settings”-“c/c+”“Catagory” 选择“Code Generation”“use run-time library”选择“debug multithreaded”到此处解决一般问题,如果又一下错误提示:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external通过查询资料后可知,解决步骤如下;1.在VC+6.0编译环境中进行下列操作:“Project”-“settings”-“c/c+”“Catagory” 选择“Code Generation”“use run-time

6、 library”选择“debug multithreaded”到此处解决一般问题,如果又一下错误提示:libcmtd.lib(crt0.obj) : error LNK2001: unresolved externalsymbol _mainDebug/Hello.exe : fatal error LNK1120: 1 unresolved externals,则进行第2步操作2. Project - Settings - 选择Link属性页,在Project Options中将/subsystem:console改成/subsystem:windows.此时确定解决一般问题.程序设计基本

7、概念和原理MFC窗口类CWnd:在Windows系统里,一个窗口的属性分两个地方存放:一部分放在“窗口类”里头,如上所述的在注册窗口时指定;另一部分放在Windows Object本身,如:窗口的尺寸,窗口的位置(X,Y轴),窗口的Z轴顺序,窗口的状态,和其他窗口的关系,窗口是否可以接收键盘或鼠标消息,等等。为了表达所有这些窗口的共性,MFC设计了一个窗口基类CWnd。有一点非常重要,那就是CWnd提供了一个标准而通用的MFC窗口过程,MFC下所有的窗口都使用这个窗口过程。至于通用的窗口过程却能为各个窗口实现不同的操作.CFrameWnd类:CFrameWnd类往往用于创建应用程序的主窗口,因

8、为它能很好地支持系统菜单和控制条,为此定义了大量的成员函数和变量。在编写文档/视图结构的应用程序时,CFrameWnd作为主窗口管理视图和文档对象。视图对象和控制条都成为CFrameWnd的子窗口,它们分享客户区,其位置被CFrameWnd有效地排列。 CFrameWnd直接支持单文档界面,对于多文档界面,使用其派生类CMDIFrameWnd和CMDIChildWnd.GetLocalTime函数GetLocalTime是一个Windows API 函数,用来获取当地的当前系统日期和时间.Onpaint:在C+中Onpaint是WM_PAINT消息的消息处理函数,Onpaint()是Cwnd的

9、类成员,负责响应WM_PAINT.基本原理:本次课程设计是基于面向对象的应用程序设计,主要运用C+语言在VC+开发环境下的MFC中编程实现。模拟时钟的基本功能是程序初始在屏幕上有一指针式时钟表盘,表盘为圆形,内部分布有12个刻度,表盘上有三个长度和形状不同的时针分针和秒针,相互之间容易辨认,指针的运动通过数学推导之后以代码实现,且时钟显示时间与系统时间是一致的.三、实验仪器设备及材料台式机电脑、Visual C+ 6.0四、操作方法与实验步骤(1) 绘制指针式的时钟和数字式的时钟图形时,要在CWnd类下进行。其中OnPaint()函数在绘制视图窗口时被调用, 在定义了画刷CBrush和画笔CP

10、en之后,调用GetClientRect()定义屏幕大小并确定椭圆中心的坐标,然后调用Ellipse绘制椭圆,即指针式的时钟表盘,调用MoveTo()和LineTo()绘制表盘指针。(2) 模拟时钟处理消息的过程:首先调用SetTimer函数定义时钟消息,包括参数指定计时器的ID,消息产生的时间间隔,回调函数为NULL;调用消息处理函数OnTimer()刷新窗口显示。在相应的WM_TIMER消息处理里添加时钟消息响应代码;最后调用KillTimer释放该时钟。(3) 要实现时钟的动态效果,即时间窗显示的时间每隔一秒钟更新一次,要定时更新,则应利用WM_TIMER消息,计时器每隔一定的时间间隔就

11、会发出一个WM_TIMER消息,而这个时间间隔可由用户指定。MFC的Windows类提供了WM_TIMER消息处理函数OnTimer(),应在该函数内进行更新时间窗格的工作。先利用ClassWazard给CMainFrame类加入WM_TIMER消息处理函数OnTimer(),CMainFrame: OnTimer()函数是在系统发给框架窗口消息WM_TIMER时调用的,在CMainFrame:OnCreate()函数内调用CWnd:SetTimer()以安装一个计时器,使OnTimer()在设定的时间间隔被调用。(4) 通过调用GetCurrentTime()函数来实现时钟时间与计算机系统时

12、间保持一致.开始流程图:创建应用程序MFC主窗口定义画笔Cpen和画刷CBrush定义屏幕大小并确定椭圆中心坐标GetClientRect()调用SetTimer()函数设置时间间隔 获取当前系统时间GetLocaTime()调用MoveTo()和LineLineTo()绘制时钟中面的指针和刻度调用消息处理函数Onpaint()刷新窗口显示 时间显示 退出 程序结束类图:五、实验数据记录及处理获取系统时间:SYSTEMTIME st;GetLocalTime(&st);定义时分秒显示时间:double h, m, s;s = st.wSecond;m = st.wMinute + s/60;h

13、 = st.wHour + m/60;定义消息处理函数:void CMyWnd:OnPaint()RECT rect;GetClientRect(&rect);POINT mid;mid.x = rect.right / 2;mid.y = rect.bottom / 2;int l, t, r, b;double rr;if(rect.right rect.bottom) l = (rect.right - rect.bottom) / 2;t = 0;r = rect.bottom + l;b = rect.bottom;rr = b/2; else l = 0;t = (rect.bot

14、tom - rect.right) / 2;r = rect.right;b = rect.right + t;rr = r/2;调用MoveTo()和LineTo()函数,绘制时钟钟面的指针和刻度,使指针按照系统时间转动:for(int i = 0; i 360; i += 6)if(i % 30 = 0)len = rr/10;elselen = rr/20;p1.x = (rr-len)*cos(i/AG) + mid.x;p1.y = (rr-len)*sin(i/AG) + mid.y;p2.x = rr*cos(i/AG) + mid.x;p2.y = rr*sin(i/AG) + mid.y;m_memDC.MoveTo(p1.x, p1.y);m_memDC.LineTo(p2.x, p2.y);源代码:#include #include class CMyWnd : public CFrameWnd/从Cwnd继承一个MFC窗口基类public:CMyWnd();protected:afx_msg void OnPaint();/声明消息处理函数afx_msg void OnSize(UINT

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号