MFC 模拟时钟

MFC    模拟时钟
MFC    模拟时钟

模拟时钟

以实例为背景学习基于MFC的WINDOWS应用程序设计,编写一个模拟时钟程序,此程序在屏幕上有一个指针式钟面,用菜单选项进行时间控制。时间必与机器系统时间相同,不可任意设置。

1 编程要求

(1)为该程序设计绘制合适的时钟外形。

(2)程序界面设计合理,色彩得体大方,显示正确。

(3)时针、分针和秒针形象美观,即使各指针重合也可辨认。

(4)各指针运动规律正确,以便于演示。

(5)时间显示正确,并且显示当前系统时间。

(6)按下设置菜单项可实现时间的调整与重新显示

2 问题分析

本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、菜单命令、画笔/画刷等。指针运动算法和屏幕重绘方法是本程序主要难点所在。

不论何种指针,每次转动均以π/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。计算指针端点(x, y)的公式如下:

x =圆心x坐标+ 指针长度* cos (指针方向角)

y =圆心y坐标+ 指针长度* sin (指针方向角)

注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点。

三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。若用三个定时器消息分别处理时针、分针和秒针的运动,就会使问题复杂化且不易实现三个指针联动的正确规律。采用一个定时器消息可以很容易实现指针联动算法。

3 实现步骤

(1)用AppWizard生成一个名为“模拟时钟”的单文档(SDI)程序框架。为了简化应用程序,在第四步时去掉Docking toolbar和Initial status bar选择项,其他各选项均可用缺省设置。

(2)编辑项目的菜单资源,在主框架窗口的主菜单(IDR_MAINFRAME)中添加一个名为“时钟控制”的下拉菜单。在“时钟控制”菜单中添加二个菜单选项“启动时钟”、“停止时钟”并在菜单属性项中设定“启动时钟”菜单的ID 标号为ID_START,“停止时钟”菜单的ID标号为ID_STOP,“为了简化菜单,可删除系统原有的“编辑”、“关于”等菜单项。

(3)利用ClassWizard为视图类添加菜单命令处理函数。进入ClassWizard 的Message Maps选项卡,选择Class Name项为CMyView类,在Object IDs列表框中分别选择新添加的菜单选项的ID,在Messages列表框中选择COMMAND,按下Add Function按钮添加成员函数。ClassWizard会为“启动时钟”、“停止时钟”菜单选项添加相应的消息响应函数OnStart ( )、OnStop ( )。

(4)设计好这个对话框模板后,利用ClassWizard自动建立对话框类。进入ClassWizard后,它会发现已建立的对话框模板资源,并弹出一个对话框询问是否要为该对话框模板建立类。按下“OK”按钮,会弹出New Class对话框,在Name栏填写对话框类的名称CSetTimeDlg后按“OK”按钮,即可为对话框创建一个对应的类。

(5)编辑工程的图标资源,在Resource View选项窗口中修改Icon结点所包含的主框架图标(IDR_MAINFRAME),修改标准图标(32像素×32像素)及小图标(16像素×16像素),从而为该程序设计一个美观大方的图标。

(6)完成以上工作后,即可修改程序框架,添加必要的代码。

4 程序清单

按以下步骤向视图类(CClockView)添加下列数据成员及成员函数。

(1) 添加时钟的画笔及画刷变量。

CPen m_HouPen, m_MinPen, m_SecPen; // 各种针的画笔

CBrush m_MarkBrush; // 表盘标记的画刷

(2) 添加时钟控制变量。

CPoint m_Center; // 表的中心

double m_Radius; // 表的半径

CPoint m_Hour [2], m_OldHour [2]; // 时针当前及前一次位置

CPoint m_Minute [2], m_OldMin [2]; // 分针当前及前一次位置

CPoint m_Second [2], m_OldSec [2]; // 秒针当前及前一次位置

(3) 添加两个函数,计算时钟各指针位置。

void SetClock (int hour, int minute, int second);

CPoint GetPoint (int nLenth, int nValue);

(4) 在视图类中加入此函数,来画时钟

static CSize operator* (const CSize &sz,float scalar)

{

CSize new_sz;

new_sz.cx=int(sz.cx*scalar);

new_sz.cy=int(sz.cy*scalar);

return new_sz;

}

CSize PositionOnCircle(const CSize& radius,double angle)

{

CSize result;

result.cx=(int) (sin ( angle * 2 * M_PI ) * radius.cx);

result.cy=(int) (-cos (angle * 2 * M_PI ) * radius.cy);

return result;

}

const static COLORREF pieColorLookup[]=

{

RGB(248,141,177),

RGB(235,252,69),

RGB(90,87,213)

};

void CMainFrame::DrawClock(CDC *pDC)

{

CRect clientArea;

GetClientRect(&clientArea);

CRect theClockFace(CPoint(5,5),clientArea.Size()-CSize(10,10));

CPen pen;

CBrush brush;

int piePart;

CPoint center,p1,p2;

CSize radius;

SYSTEMTIME st;

GetLocalTime(&st);

radius=theClockFace.Size()*0.5;

center=theClockFace.CenterPoint();

pDC->SetArcDirection(AD_CLOCKWISE);

for(piePart=0;piePart<12;piePart++)

{

COLORREF pieColor;

pieColor = pieColorLookup[piePart%3];

pen.CreatePen(PS_SOLID,1,pieColor);

brush.CreateSolidBrush(pieColor);

pDC->SelectObject(&pen);

pDC->SelectObject(&brush);

p1=center+PositionOnCircle(radius,piePart/12.0);

p2=center+PositionOnCircle(radius,(piePart+1)/12.0);

pDC->Pie(&theClockFace,p1,p2);

pen.DeleteObject();

brush.DeleteObject();

}

pen.CreatePen(PS_SOLID,4,RGB(180,0,0));

pDC->SelectObject(&pen);

pDC->MoveTo(center);

pDC->LineTo(center+PositionOnCircle(radius,st.wHour/12.0+st.wMinute/72 0.0)*0.4);

pen.DeleteObject();

pen.CreatePen(PS_SOLID,4,RGB(0,180,0));

pDC->SelectObject(&pen);

pDC->MoveTo(center);

pDC->LineTo(center+PositionOnCircle(radius,st.wMinute/60.0)*0.8);

pen.DeleteObject();

pen.CreatePen(PS_SOLID,1,RGB(0,0,0));

pDC->SelectObject(&pen);

pDC->MoveTo(center);

pDC->LineTo(center+PositionOnCircle(radius,st.wSecond/60.0)*0.95);

}

(5)在其中加入次函数使更新显示,使显示当前系统时间

void CMainFrame::OnUpdateAlwaysOnTop(CCmdUI *pCmdUI)

{

pCmdUI->SetCheck(IsOnTop);

}

(6) 按照下列步骤增加时钟控制代码:

①修改Onstart和OnStop函数,使其可以停止时钟和重新显示时间。其代码为:

void CMainFrame::OnStart()

{

// TODO: Add your command handler code here

SetTimer(100,1000,NULL);

}

void CMainFrame::OnStop()

{

// TODO: Add your command handler code here

KillTimer(100);

}

(7)至此,时钟程序设计完成。

程序运行:

模拟时钟示意图

进行程序检验:

运行程序后显示入上图所示:单击“时间控制”菜单项后,会显示2个下拉选项“开启时间”和“停止时间”,点击“停止时间”选项时钟将停止,在点击“开启时间”选项,继续下士系统当期时间,正常运行。

用C++编写模拟时钟程序

模拟时钟程序 1 基本功能描述 本次课程设计是基于面向对象的应用程序设计,主要运用C++语言在VC++开发环境下的MFC中编程实现。模拟时钟的基本功能是程序初始在屏幕上有一指针式时钟表盘,表盘为椭圆形,内部分布有12个刻度,表盘上有三个长度和颜色不同的时针分针和秒针,相互之间容易辨认,指针的运动通过数学推导之后以代码实现。表盘的下方是一个数字形式显示的数字钟,其显示时间的格式是时:分:秒,指针式时钟和数字式时钟显示的时间同步,且两个时钟所显示的时间与系统时间相致,页面的菜单项设有时间设置项,可以对所显示的时间进行调整,能进行调整的具体内容是年、月、日、时、分、秒。设计成功之后,此应用程序便可以起到时钟显示的作用。 2 设计思路 2.1 程序流程图

图1 模拟时钟程序流程图 2.2 程序流程分析 (1) 绘制指针式的时钟和数字式的时钟图形时,要在CView类下进行。其中OnDraw()函数在绘制视图窗口时被调用,在定义了画刷CBrush和画笔CPen之后,调用GetClientRect()定义屏幕大小并确定椭圆中心的坐标,然后调用Ellipse绘制椭圆,即指针式的时钟表盘,SetTextColor绘制文本颜色,调用MoveTo和LineTo绘制表盘指针,同时调用CreateFont()创建数字钟字体,TextOut则是用以数字钟的文本输出。 (2) 模拟时钟处理消息的过程:首先调用SetTimer函数定义时钟消息,包括参数指定计时器的ID,消息产生的时间间隔,回调函数为NULL;调用消息处理函数OnTimer()刷新窗口显示。在相应的WM_TIMER消息处理里添加时钟消息响应代码;最后调用KillTimer 释放该时钟。 (3) 要实现时钟的动态效果,即时间窗显示的时间每隔一秒钟更新一次,需要在时间窗格的正文调用CStatusBar::SetPaneText()函数。要定时更新,则应利用WM_TIMER消息,计时器每隔一定的时间间隔就会发出一个WM_TIMER消息,而这个时间间隔可由用户指定。MFC的Windows类提供了WM_TIMER消息处理函数OnTimer(),应在该函数内进行更新时间窗格的工作。先利用ClassWazard给CMainFrame类加入WM_TIMER消息处理函数OnTimer(),CMainFrame:: OnTimer()函数是在系统发给框架窗口消息WM_TIMER时调用

Visual C++基于对话框的MFC应用程序---简单的时钟实例实验一

1.1 创建对话框的应用程序 1.使用AppWizard创建应用程序框架 首先,创建一个对话框应用程序,其工程文件名为:ch1.dsp。具体步骤如下: (1)启动Visual C++ 6.0,在File菜单中选择new菜单项;(2)在new对话框的Project页中选择 MFC AppWizard(exe)选项,在Project name框中输入:ch1,并在Location 框中指定希望的目录路径,编译系统生成的各种文件将会存放在该目录下,然后点击[OK]按钮 (3)MFC AppWizard-Step1 中选择Dialog based 选项,MFC AppWizard-Step2 到MFC AppWizard-Step4中取默认选项;(4)进入VC对话框设计界面后,选中 [TODO:在这里设置对话控制。]静态框并按del键删除该框,选中[取消]按钮并按del键删除该按钮; (5)将[确认]按钮拖曳到对话框的下方中间。生成的对话框设计窗口(如图1-1所示)。 图1-1

2.向类中添加系统消息响应函数 Windows应用程序的采用事件触发、消息驱动机制和大量的消息响应函数构成了应用程序的主体。本示例需要用到两个消息响应函数OnCtlColor()和OnTimer(),前者响应窗口消息:WM_CTLCOLOR,后者响应窗口消息:WM_TIMER。关于这两个函数的功能和用法暂且略过,留待后面小节再叙。这里先介绍响应函数加载的方法。 在CCh1Dlg类中添加OnCtlColor( )函数的操作方法如下:(1)打开类向导(MFC ClassWizard)窗口,选择Message Maps 页; (2)选择工程、类和对象标识。在Message Maps页的Project、Class name、Object Ids框中 分别选择:ch1、CCh1Dlg、CCh1Dlg; (3)添加响应函数。在Message Maps页的Messages框中选中并双击窗口消息:WM_CTLCOLOR,此时,消息WM_CTLCOLOR 的响应函数OnCtlColor( )被添加到类向导底部Member Functions框中。 注意,添加OnTimer( )函数的过程与上述过程相似,只是第(3)步选择WM_TIMER消息,而不是WM_CTLCOLOR。 添加完毕后,按[OK]按钮退出类向导。回到项目工作区,在项目工作区窗口展开CCh1Dlg类,可以看到类中添加了OnCtlColor( )和OnTimer( )两个消息响应函数。

用C#编的模拟时钟(附源代码)

使用C#模拟时钟表的一种简单制作方法 1.GDI+图形库简介 1.1概述 GDI+是Microsoft的新.NET Framework类库用于图形编程,因为它是.NET Framework的一部分,所以也是面对对象的。 1.2设备环境和对象 在GDI+中识别输出设备的方式是使用设备环境DC对象,该对象存储特定设备的信息并能把GDI+API函数调用转换为要发送给该设备的指令,还可以查询设备环境对象,确定对应的设 备有什么功能,这样才能据此调整输出结果。 在GDI+中设备环境包装在.NET基类System.Drawing.Graphics中,大多数绘图工作都是调用Graphics的对象完成的。 2.如何利用GDI+绘制时钟表 2.1时钟表的各控件属性的设置 用C#中各控件制作一个指针式的时钟放在桌面上显示的界面。包括1个PictureBox控件、1个Timer控件、1个NotifyIcon控件及StatusStrip控件。 2.2各控件的属性设置 Timer控件的Interval属性值设置为1000,Enable属性值设置为True;窗体的StartPosi tion属性设置为CenterScreen,这个属性使得钟表在屏幕上中中央显示。 2.3功能实现代码 为实现该时钟表功能,需要设计并输入相应对象相应事件或过程的程序代码。方法是:在设计状态,双击相应控件,或双击控件的某一事件,并输入相应的C#程序代码。 2.4通用声明及时钟表设计方法 在程序中需要有一批变量或常量的定义,可事先在通用声明中完成,代码如下: const int s_pinlen = 100;//秒针长度 const int m_pinlen = 75; //分针长度 const int h_pinlen = 75; //时针长度 PointF center = new PointF(s_pinlen +3, s_pinlen +3);//中心点位置 SolidBrush sb = new SolidBrush(Color.Black);//时钟圆心的刷子 除上述变量声明外,时钟表功能编写子方法,方法名为:AngleToPos和myClock,

模拟时钟转动程序

模拟时钟转动程序 一、课程设计的内容 能模拟机械钟表行走,还要准确利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。 二、课程设计的要求与数据 1.进一步掌握和利用C语言进行课程设计的能力 2.进一步理解和运用结构化程序设计的思想和方法 3.初步掌握开发一个小型实用系统的基本方法 4.学会调试一个较长程序的基本方法 5.学会利用流程图和N-S图表示算法 6.掌握书写程序设计开发文当的能力 三、课程设计应完成的工作 1、编写完成相应题目的程序 2、编写课程设计报告,课程设计报告应该包含以下6部分 1)需求分析:包括设计题目、设计要求以及系统功能需求分析 2)总体设计:包括系统总体设计框架和系统功能模块图 3)详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图 4)调试分析过程描述:包括测试数据、测试输出结果以及对程序测试过程中存在问题进行思考(主要问题的出错现象、出错原因、 解决方法及其效果等,相应效果截图) 5)总结:课程设计完成了哪些主要功能,是否有扩展功能?还有哪些地方需要改进?课程设计的学习与体会?有哪些合理化建 议? 6)附录:主要原程序代码含必要的注释 3、答辩:在实验室建立程序运行环境,并在指导教师的监督下,独立解决问题,运行程序和回答教师的提问。 四、课程设计进程安排

五、应收集的资料及其主要参考文献 [1]谭浩强.C程序设计(第三版)[M]北京:清华大学出版社,2005年9月 [2]谭浩强.C程序设计题解与上机指导(第三版)[M]北京:清华大学出版社,2005年7月 [3]夏宝岚张慕蓉夏耘.程序设计教程(第二版)[M],上海:华东理工出版社,2003.1 [4]陈锦昌赵明秀.C语言计算机绘图教程(第一版)[M],广州:华南理工大 学出版社,1998.9 发出任务日期:2010年12月15日指导教师签名: 计划完成日期:2010年12月30日基层教学单位责任人签名: 主管院长签章: 目录 1.设计目的与要求 (5)

单片机模拟电子时钟设计

单片机课程设计 课题:单片机模拟电子时钟设计 学院:自动化学院 专业: 07电气工程及其自动化 (低压电力智能控制方向) 姓名:谭善文 学号:2007104743002 指导老师:张华

目录 一、前言 (3) 二、设计目的 (3) 三、设计任务与要求 (3) 四、设计原理 (3) 五、总体设计方案 (4) 六、小结与展望 (21) 七、致谢 (22) 八、主要参考文献 (22) (3)、晶振 (5) (4)、LED (5) (5)、复位 (6) (6)、蜂鸣器 (6) (7)、按键 (6) (8)、串行口 (7) (9)、单片机 (7) (10)、数码管 (8) 2、程序编写 (10) 六、小结与展望 (21) 七、致谢 (22) 八、主要参考文献 (22)

一、前言 在当今的工作和生活环境中,有越来越多的单片机在为人们服务,例如电视遥控、手机、洗衣机、空调等,单片机几乎无所不在,学习单片微型计算机这门课程,就是为了对单片微型计算机有进一步感性的认识,了解、掌握、应用,甚至设计开发它。让我们能综合运用单片机的软、硬件技术分析实际问题,为工业生产、科学研究和实验设备等领域的单片机应用和开发打下良好的基础。 二、设计目的 a)通过《单片微型计算机原理与接口技术教程》了解单片微型计算机的发 展; b)根据课程设计的要求,学会用汇编语言设计程序,学会应用程序设计调 试软件; c)通过调试程序设计模块,掌握单片微型计算机的结构原理,了解程序设 计的编程思想; d)通过软件调试熟悉使用单片机指令系统,掌握汇编语言程序设计方法及 编程技巧,掌握子程序的设计与使用,熟悉中断服务程序的设计及调用 过程。 三、设计任务与要求 任务:利用单片机定时功能实现电子时钟的计时 要求:1.设计单片机电子时钟设计控制方案,功能设计; 2.详细描述实现需要的硬件,效果等; 3.编写汇编语言程序设计,在KEIL仿真实现调试程序; 四、设计原理 单片机可以利用定时功能实现电子时钟的计时。设计时利用单片机的定时器

用VC++制作 模拟时钟应用程序

案例五模拟时钟应用程序 以实例为背景学习基于MFC的WINDOWS应用程序设计,编写一个模拟时钟程序,此程序在屏幕左边有一个指针式钟面,右方有两个矩形框,上面以数字方式显示日期和时间,该时间应与指针显示的时间一致,下方的矩形框作为秒表。用菜单选项或按钮设置时间和秒表。时间不必与机器系统时间相同,可任意设置。 模拟时钟示意图 1 编程要求 (1)为该程序设计一个美观大方的图标。 (2)程序界面设计合理,色彩得体大方,显示正确。 (3)时针、分针和秒针形象美观,即使各指针重合也可辨认。 (4)各指针运动规律正确。为便于演示,时钟速度应比实际时间快20倍,即1小时相当于3分钟。 (5)数字式时钟的时间显示与指针式时钟显示一致。

(6)按下设置时间按钮或菜单项可弹出一对话框,用于设置当前的时间和日期。 (7)按下秒表控制按钮后,秒表显示窗中显示从0开始的时间,单位为百分之一秒。再次按下秒表控制按钮后计时停止,该窗口显示累计时间。 2 问题分析 本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、定时器消息、鼠标消息、菜单命令、对话框、画笔/画刷、显示文字等。指针运动算法和屏幕重绘方法是本程序主要难点所在。 不论何种指针,每次转动均以π/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。计算指针端点(x, y)的公式如下:x =圆心x坐标+ 指针长度* cos (指针方向角) y =圆心y坐标+ 指针长度* sin (指针方向角) 注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点。 三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。若用三个定时器消息分别处理时针、分针和秒针的运动,就会使问题复杂化且不易实现三个指针联动的正确规律。采用一个定时器消息可以很容易实现指针联动算法。 由于屏幕的重绘速度很快(50 ms一次),如果采用全屏删除式重绘则闪烁十分明显,显示效果不佳。本程序采用非删除式重绘,假定指

MFC 时钟

WINDOWS程序设计实验一报告 GDI对象使用 设计内容、方法与难点: 本课题设计的内容包括了时钟的显示、定时器的应用。新建一个对话框,在对话框内进行数据绘制,并设计定时器,在定时器中进行时钟行走的绘图刷新。点击开始按钮,进行图像绘制;再次点击开始/暂停按钮,绘制暂停 课题难点一:如何对表盘上的,时针、分针、秒针进行处理 解决方案: 抽象出一个指针类,时针、分针、秒针对指针类进行实例化,拥有相同的属性和方法,便于管理 课题难点二:绘制数据,如何在对话框面板上进行图像绘制,文字输出。 解决方案 在MainFrame 类中创建绘图函数,函数的设置一个CDC *pDC参数,图像和文本的显示,在 pDC 进行绘制和显示。 课题难点三:图像刷新时的闪烁问题 解决方案 在响应OnTimer事件时,每次绘图只是进行指针的重绘和时间显示的重绘,表盘和其他控件不进行重新绘制,减少每次绘图的资源 作品特色 本作品的特点是有: 界面美观,在色彩的选择上参考了win7时钟的风格。二是无闪烁。设置有开始和停止按钮,可以实时控制时钟的运行。

项目类设计: (要求有类图和类功能、成员函数和成员变量的文字介绍) 时钟类: 成员变量 CNeedle *m_HourNeedle; //时针 CNeedle *m_MinuteNeedle; //分针 CNeedle *m_SecondNeedle; //秒针 CPen m_CirclePen; //外部圆的画笔 CPen m_KeyPointPen; //关键点的画笔 CPen m_PointPen; //其他点的画笔 成员函数 void DrawCircle(CDC *pDC,int x1,int y1,int x2,int y2); void Draw(CDC *pDC,int nMoveToX,int nMoveToY,int nDrawX,int nDrawY,CString num); //绘制时钟上面的各个点 void CreatePen(int index,int nPenStyle,int nWidth,COLORREF color); //创建画笔 CPen *GetCirclePen(); //获得圆圈的画笔 CPen *GetKeyPointPen(); //获得关键点的画笔 CPen *GetPointPen(); //获得其他点的画笔

模拟时钟转动程序

东南大学 C语言课程设计报告 课程名称:计算机综合课程设计 学院:土木工程学院 设计题目:模拟时钟转动程序 级别:B级 学生姓名:韦信丞 学号:05114419 同组学生: 学号: 指导教师:郭恒宁 2015年9月 1 日 C语言课程设计任务书

模拟时钟转动程序 一、课程设计的内容 1、能模拟机械钟表行走 2、还要准确利用数字显示日期和时间 3、在屏幕上显示一个活动时钟 4、按任意键时程序退出。 二、课程设计应完成的工作 1、编写完成相应题目的程序 2、编写课程设计报告,课程设计报告应该包含以下6部分 1)需求分析:包括设计题目、设计要求以及系统功能需求分析 2)总体设计:包括系统总体设计框架和系统功能模块图 3)详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图 4)调试分析过程描述:包括测试数据、测试输出结果以及对程序测试过程中存在问题进行思考(主要问题的出错现象、出错原因、 解决方法及其效果等,相应效果截图) 5)总结:课程设计完成了哪些主要功能,是否有扩展功能?还有哪些地方需要改进?课程设计的学习与体会?有哪些合理化建 议? 6)附录:主要原程序代码含必要的注释 3、答辩:在实验室建立程序运行环境,并在指导教师的监督下,独立解决问题,运行程序和回答教师的提问。 四、应收集的资料及其主要参考文献 [1]谭浩强.C程序设计(第四版),北京:清华大学出版社,2010年6月[2]陈清华朱红 . C语言课程设计案例精选与编程指导(第一版),南京:东南大学出版社,2003年6月 [3]顾小晶 . 实用C语言简明教程(第一版),北京:中国电力出版社,2003年9月

模拟时钟程序设计全解

目录 1.设计目的和内容 2.基本功能描述 3.设计思路 4.软件设计:设计步骤、界面设计、关键功能的实现 5.结论与心得体会 6.参考文献 7.附录:调试报告、测试结果、关键源代码

1.设计目的和实验内容 1.1设计目的: 1学习Visual C++的MFC开发程序的步骤。 2综合运用所学的类、继承和多态的知识。 3进一步掌握程序的调试方法。 1.2 实验内容 1基于MFC的WINDOWS应用程序设计方法,编写一个模拟时钟程序; 2在屏幕中间有一个指针式时钟; 3这个时钟的下方或者上方以数字方式显示时间,该时间应与指针显示的时间一致; 4用菜单选项打开的对话框,或者主界面里的控件设置时间。时间不必与机器系统时间相同,可任意设置。 2.基本功能描述 编辑运行代码时,窗口界面会出现一个色调为绿色,背景为黑色的指针时钟;一个精确到秒的数字时钟;一个退出按钮;一个设置按钮;三个设置自定义时间的编辑框。运行时调用的为系统的时间,在编辑框中分别输入自定义时分秒点击设置,指针时钟和数字时钟会跳转为自定义时间。按退出键关闭窗口。 3.设计思路 首先,指针时钟的背景,指针形状长度,正点格子和秒数格子的设计代码过于繁琐和复杂,稍做了解便可从网上抄录,然后再把参数及变量改成自己设计部分所需的名称即可。 其次,本程序的基础及核心思路为用一个计数器器SetTime(1,1000,NULL)调用WM_TIMER的On Timer()函数,达到更新时间,重绘窗口的效果。 而在程序初步完成后,导师初查指出用SetTime()计数与系统时间的进度存在误差,所以不可以用SetTime()函数计时。于是本人将算法改成用系统时间和编辑框输入的时间作差,得到一个定值,再用系统时间减去这个定值就为设置的时间了,此时SetTime()函

计算机图形学 MFC VC++6.0制作的简单时钟源代码

计算机图形学MFC VC++6.0制作的简单时钟 // MFCFrame1View.cpp : implementation of the CMFCFrame1View class // #include "stdafx.h" #include "MFCFrame1.h" #include "MFCFrame1Doc.h" #include "MFCFrame1View.h" #include "PointDialog.h" #include "math.h" GLUquadricObj *objCylinder = gluNewQuadric(); #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMFCFrame1View IMPLEMENT_DYNCREATE(CMFCFrame1View, CView) BEGIN_MESSAGE_MAP(CMFCFrame1View, CView) //{{AFX_MSG_MAP(CMFCFrame1View) ON_WM_CREATE() ON_WM_DESTROY() ON_WM_SIZE() ON_COMMAND(IDM_ZIXUAN, OnZixuan) ON_WM_TIMER() ON_COMMAND(IDM_ChangDirect, OnChangDirect) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMFCFrame1View construction/destruction CMFCFrame1View::CMFCFrame1View() {

Java课程设计-时钟图形模拟

课程设计任务书

目录 1 设计内容及要求 (1) 1.1 设计内容 (1) 1.2 设计目的及意义 (1) 2 概要设计 (1) 2.1功能简介 (1) 2.2功能说明: (1) 2.3 总体程序框图 (2) 3 设计过程 (3) 3.1各个模块程序流程图 (3) 3.2运行界面及关键代码 (4) 4设计结果与分析 (6) 4.1设计结果 (6) 4.2分析 (6) 5 总结 (7) 6 参考文献 (7) 附程序清单及源程序 (8)

1 设计内容及要求 1.1 设计内容 通过编程最终使电脑屏幕显示模拟时钟,并正常运行显示表针时间,电脑上呈现一个图种的模型表示电脑上的时间,并可以模拟时钟走动。 1.2 设计目的及意义 设计目的及意义:熟悉Visual c++ 6.0软件的应用,C语言相关函数,语句的学习,查找资料代码等,编程、调试、运行、效果显示调整,完成上传,熟悉编程语言,了解程序运行以及图像显示等C语言的应用,通过编程实现既定功能。培养自学能力,独立思考能力,将理论形成实际运用,同时可以掌握下列运算符的使用: 1 .数据类型(整形、实型、字符型、指针、数组、结构等)。 2 .运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等)。 3 .程序结构(顺序结构、判断选择结构、循环结构) 5 .复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等)。 6 .学会编制结构清晰、风格良好、数据结构适当的C语言程序。 2 概要设计 2.1功能简介 实现功能如下: (1)在屏幕上最终显示一个图形时钟(用程序绘制一个与时钟样式相似即可),能模拟机械钟表行走。 (2)数字式显示时间与指针式显示时间一致,且各指针运动规律正确。 (3)能准确的利用数字显示时间和日期。 (4)按ESC可以退出程序。 2.2功能说明: 内容:指针式时钟模块完成在屏幕上显示一个活动时钟,模拟机械钟表行走,时针,分针,秒针不同颜色且顺时针旋转,获取系统时间;数字式时钟模块完成显示时间格式年月日时分秒,小时为24小时制,分和秒为60进制与指针式的时

图形模拟时钟C语言课程设计

《高级语言程序设计》 课程设计报告 题目:图形模拟时钟 专业:计算机科学与技术 班级:计算机科学与技术2班 姓名: 学号: 指导教师:陈广宏 成绩: 计算机与信息工程系 2014年6月20日

目录 1 设计内容及要求 (1) 1.1 设计内容 (1) 1.2 设计目的及意义 (1) 2 概要设计 (1) 2.1功能简介 (1) 2.2功能说明: (1) 2.3 总体程序框图 (2) 3 设计过程 (3) 3.1各个模块程序流程图 (3) 3.2运行界面及关键代码 (4) 4设计结果与分析 (6) 4.1设计结果 (6) 4.2分析 (6) 5 总结 (7) 6 参考文献 (7) 附程序清单及源程序 (8)

1 设计内容及要求 1.1 设计内容 通过编程最终使电脑屏幕显示模拟时钟,并正常运行显示表针时间,电脑上呈现一个图种的模型表示电脑上的时间,并可以模拟时钟走动。 1.2 设计目的及意义 设计目的及意义:熟悉Visual c++ 6.0软件的应用,C语言相关函数,语句的学习,查找资料代码等,编程、调试、运行、效果显示调整,完成上传,熟悉编程语言,了解程序运行以及图像显示等C语言的应用,通过编程实现既定功能。培养自学能力,独立思考能力,将理论形成实际运用,同时可以掌握下列运算符的使用: 1 .数据类型(整形、实型、字符型、指针、数组、结构等)。 2 .运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等)。 3 .程序结构(顺序结构、判断选择结构、循环结构) 5 .复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等)。 6 .学会编制结构清晰、风格良好、数据结构适当的C语言程序。 2 概要设计 2.1功能简介 实现功能如下: (1)在屏幕上最终显示一个图形时钟(用程序绘制一个与时钟样式相似即可),能模拟机械钟表行走。 (2)数字式显示时间与指针式显示时间一致,且各指针运动规律正确。 (3)能准确的利用数字显示时间和日期。 (4)按ESC可以退出程序。 2.2功能说明: 内容:指针式时钟模块完成在屏幕上显示一个活动时钟,模拟机械钟表行走,时针,分针,秒针不同颜色且顺时针旋转,获取系统时间;数字式时钟模块完成显示时间格式年月日时分秒,小时为24小时制,分和秒为60进制与指针式的时

7用C#编的模拟时钟(附源代码)

使用C#模拟时钟表的一种简单制作方法

PointF center=new PointF(s_pinlen+3,s_pinlen+3);//中心点位置 SolidBrush sb=new SolidBrush(Color.Black);//时钟圆心的刷子 除上述变量声明外,时钟表功能编写子方法,方法名为:AngleToPos和myClock, 方法AngleToPos是根据角度和百分比计算出一个点的坐标函数,代码如下: PointF AngleToPos(int angle,float percent) { PointF pos=new PointF(); double radian=angle*Math.PI/180; pos.Y=center.Y-s_pinlen*percent*(float)Math.Sin(radian); pos.X=center.X+s_pinlen*percent*(float)Math.Cos(radian); return pos; } 方法myClock主要是绘制时钟表的中心位置、秒针、分针及时针的结束位置。代码如下: Pen pDisk=new Pen(Color.Orange,3);//时钟背景的笔 Pen pScale=new Pen(Color.Coral);//刻度的笔 Graphics myGraphics=pictureBox1.CreateGraphics(); myGraphics.Clear(Color.White); Pen myPen=new Pen(Color.Black,2); Point CPoint=new Point(s_pinlen,s_pinlen); Point SPoint=new Point((int)(CPoint.X+(Math.Sin(6*s*Math.PI/180))* s_pinlen),(int)(CPoint.Y-(Math.Cos(6*s*Math.PI/180))*s_pinlen)); Point MPoint=new Point((int)(CPoint.X+(Math.Sin(6*m*Math.PI/180))* m_pinlen),(int)(CPoint.Y-(Math.Cos(6*m*Math.PI/180))*m_pinlen)); Point HPoint=new Point((int)(CPoint.X+(Math.Sin(((30*h)+(m/2))*Ma th.PI/180))*h_pinlen),(int)(CPoint.Y-(Math.Cos(((30*h)+(m/2))*Mat h.PI/180))*h_pinlen)); myGraphics.FillEllipse(sb,center.X-8,center.Y-7,14,14); myGraphics.DrawLine(myPen,CPoint,SPoint); myPen=new Pen(Color.Blue,4);

C语言课程设计报告-模拟时钟转动程序

课程设计报告 课程名称结构化程序设计课程设计院部名称 专业 班级 学生姓名王蕾 学号 课程设计地点 课程设计学时 指导教师 金陵科技学院教务处制

目录 第一章课程设计的目的和要求............................................. 1.1 C语言课程设计的目的............................................ 1.2 C语言课程设计实现的要求........................................ 第二章课程设计的任务内容............................................... 第三章详细设计说明..................................................... 3.1 程序系统的结构.................................................. 3.1.1 实验设备及环境:(软、硬件环境) 3.2 模块描述........................................................ 3.2.1 指针式时钟................................................ 3.2.2 数字式时钟................................................ 3.3 输出项.......................................................... 3.4 算法............................................................ 3.5 流程图.......................................................... 3.6 函数说明........................................................ 3.7 接口............................................................ 3.8 调试结果........................................................ 第四章软件使用说明..................................................... 4.1 软件使用说明及出现的问题........................................ 4.2 运行结果........................................................ 第五章课程设计心得与体会............................................... 附录1:参考文献......................................................... 附录2:修改后的源代码……………………………………………………………………

C语言模拟时钟转动课设报告-附代码

模拟时针转动程序 姓名: 学号: 完成日期:2012年12月

设计目的 加深对讲授内容的理解,尤其是一些语法规定。通过课程设计,自然地、熟练地掌握。熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。学会上机调试程序。熟悉C语言图形模式下的编程,掌握利用C语言相关函数开发电子时钟的基本原理。 能模拟机械钟表行走;要准确地利用数字显示时间;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致。 总体设计 电子时钟的功能描述

电子时钟流程图 模块描述 动画处理模块在屏幕上显示sin和cos型的动态函数图像,显示运动的问候语。 转时针动处理模块指针式的时钟表盘为椭圆形并且圆周上有分布均匀的12个刻度刻度显示清楚钟面上有长度不相同的指针即时针、分针、秒针指针的运动具有规律性为顺时针。 数字时钟处理模块数字钟显示时间的格式是年月日时分秒小时为24进制,分钟和秒是60进制,指针式的时钟和数字式的时钟显示的时间同步且两个时钟所显示的时间与计算机的系统时间一致。 详细设计 time结构体 strume time { usigned char ti_min; usigned char ti_hour; usigned char ti_hud; usigned char ti_sec; }; time 结构体定义在dos.h文件中,可以保存系统的当前时间。

double h,m,s;这三个变量分别保存小时,分钟,秒。 double x,y,x1,y1,x2,y2;保存数字时钟中小时分钟秒在屏幕中显示的位置。 struct time t[1];定义一个time结构类型的数组。 函数功能的描述 1.def() 函数原型: void def() def()函数是用来输出一组彩带的,通过输入位置和颜色的变化来输出sin型的彩带,且在整个函数中保留结果。 2. abc() 函数原型: void abc() abc()函数是用来在退出系统是输出运动的问候语,函数类型单一且比较简单。 3 .digitclock() 函数原型:void digitclock() digitclock函数用于在(x,y)位置显示clock值,clock值为时分秒。 4. clockhandle() 函数原型:void clockhandle() clockhandle()函数用于完成时针转动和数字时钟的显示,包括时针转动角度的运算,还有对声音的输出。

flash代码实例 《模拟时钟》

第28课时 代码实例《模拟时钟》 案例说明: 曾经在网页上看到过很多漂亮的时钟,本课将制作一个动画实例“模拟时钟”,动画播放后它会调用计算机的当前时间,并在此基础上继续计时。画面如图1、图2所示: 图1动画播放画面1 图2动画播放画面2 授课教师:文韬 教学目的:通过本案例的学习,让学生能够掌握提取系统时间的函数和设置影片剪辑的属性; 教学重点:设置影片剪辑的属性、提取系统时间的函数; 教学难点:提取系统时间的函数; 教学过程: 一、案例分析 我们要制作的是典型的象闹钟一样的时钟:圆圆的“身体”,长短粗细各不一样的的秒针、分针和时针。那么,首先要做的就是先将这些元件制作出来。 二、制作时钟元件 1.新建一个FLASH文档,设置舞台尺寸为270*320,背景为白色。如图3所示:2.新建一个名为“钟面”的图形元件。如图4所示: 图4 新建“钟面”元件 图3 设置文档属性

3.打开视图菜单下的网格。这样做的原因是为了在后面的制作过程中对位置的感觉更 好一些。如图5所示: 4.选择椭圆工具,按住Shift 键画一个线条颜色为黑色、粗细为 10、无填充颜色的正圆,大小为: 240*240,居中对齐。如图6所示: 5.新建一个名为“时针”的影 片剪辑元件。如图7所示: 6.选择矩形工具,在“时针” 元件编辑窗口画一个大小为8*80、 无边框颜色的黑色矩形长条。将矩形 下方尾部放置在编辑窗口的中心点。 如图8所示:图5 打开网格视图 图6 绘制钟面图7 创建“时针”元件 7.用以上相同的方 法制作“分针”元件和 “秒针”元件,注意它们 依次变长变细,指针底部 与中心点对齐。“分针” 大小为:6*100;“秒 针”大小为3*110 如图 9、图10所示: 图8 绘制时针 图9 绘制分针图10 绘制秒针 图11 在舞台上摆放各元件图12 设置钟面的数字

模拟时钟课程设计报告

课程设计报告 课程:面向对象程序设计 学号:1210461018 1210461027 1210461050姓名:张扬李佳珂金正行 班级: 12计科2班 教师:钱田芬 时间:2014年12月10日

计算机科学与技术系 设计名称:模拟时钟日期:2014年1 2月10日设计内容: 通过多线程技术,重绘界面,绘制一个虚拟的时钟,时钟界面包括表盘和指针。并用数字表显示当前的时间。 1 设计目的与要求 1.1基本要求 ⑴编写一个模拟时钟程序,此程序在屏幕中间有一指针式钟面。左上角以数字方式显示时间,该时间应与指针显示的时间一致,且与机器系统时间相同。 ⑵在设计的过程中,需要用到awt组件和Swing容器与组件,布局管理器,事件处理,绘制图形,还运用到了类的继承,事件监听器和线程。掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。增进Java 语言编辑基本功, 1.2 设计目的 ⑴设计一个带有指针、数字时钟,并且具有秒表功能,能方便我们的使用和操作,为我们以后的使用创造一个良好的平台。 ⑵把自己所学的理论知识运用到实际操作中去,以此来发现自己的不足,及时的改正。在实际的操作中学习及运用还没有学过的知识。最后在调试与测试的过程还可以提升自己的改错能力也是自己经验的积累!

2 设计环境、思想和功能描述 2.1运行环境: Eclipse +JDK平台 CPU:Pentium 2.8GHz以上 内存:256MB以上 硬盘空间:80G以上 操作系统:Windows XP Windows 7 Windows 8 2.2主要设计思想: 先是利用构造函数创建一个长为200,宽为200的窗体,颜色设置为black,并把窗体设计为固定大小。利用AWT绘制图形的方法,在窗体中间画一个圆,并且绘制时钟上的12个数字,然后利用Calendar类提供的HOUR,MINUTE和SECOND 方法获得现在的时间,在计算时间和度数的关系;在利用AWT绘制图形的方法绘制出各指针,并设置不同的颜色。在利用drawString在窗体的左上角显示出当前的时间。 2.3功能描述: 设计的时钟界面良好,比较简洁美观,程序有很强的实用性,实现程序与电脑的时间的同步。可以显示时钟,可以显示具体的数字时间,也可以显示分针秒针。

001简易数字时钟软件详细制作过程

简易数字时钟软件详细制作过程 这是我自己用VS2010制作的简易数字时钟小软件,在制作过程中收获知识不少,希望和初学MFC编程的朋友分享一下。 一、其功能有一下三点: 1.打开软件后,其程序自动获取当前电脑系统的日期、时间和周次,并同步显示在主 对话框上; 2.点击“设置时间”按钮,弹出设置时间子对话框,在其中可以设置自己想设置的时 间(采用24小时格式制)。若输入的内容和格式都合法则主对话框显示此时间,并依此时间运行;若输入的内容和格式不合法则会弹出提示消息框。 3.点击“退出”按钮,则会弹出提示消息框,询问用户是否退出系统。

二、制作过程: 1.新建一个项目名为SetTime的MFC对话框应用程序,在主对话框的属性中修改其标题为“数字显示时间”。 2.在主对话框上添加3个静态文本控件、3个编辑框控件和2个按钮控件。在3个编辑框的属性中修改其ID分别为IDC_DATE、IDC_WEEK、IDC_TIME,编辑框文本都设置为居中显示,其中日期和周次编辑框属性设置为只读。2个按钮的ID分别修改为IDC_SETTIME、 IDC_EXIT; 3.在类向导中,选择类名CSetTimeDlg,在成员变量中通过添加变量为三个编辑框分别关联对应都为CString类型的变量m_Date、m_Week、m_Time,还要为IDC_DATE编辑框关联CEdit类的对象m_ShowDate;还要为CSetTimeDlg类自定义3个unsigned char类型的变量m_Hour、m_Minute、m_Second。

4.在CSetTimeDlg::OnInitDialog()函数的// TODO: 在此添加额外的初始化代码,其位置下方添加下列代码:

Android实现模拟时钟(简单 漂亮)

Android实现模拟时钟(简单漂亮) 前言 前不久在网上看见Android实现的模拟时钟,感觉十分有意思,这里是地址: https://www.360docs.net/doc/8d10987079.html,/forum.php?mod=viewthread&t id=58324可惜的是这种方式没有 秒表。笔者突然对其有了兴趣,也想去实现以下自己的模拟时钟。折腾了一阵子总算是弄出来了 现在将实现方式共享出来,大家一些交流。 不多说,先上效果图: 准备工作 首先我们应该准备相关的素材:时钟盘、时针、分针、秒针图片. 时钟盘: 时针:

分针: 秒针: 源码部分 配置文件,比较简单:<LinearLayout xmlns:android='https://www.360docs.net/doc/8d10987079.html,/apk/res/android' xmlns:tools='https://www.360docs.net/doc/8d10987079.html,/tools' android:layout_width='fill_parent' android:layout_height='fill_parent' android:orientation='vertical' tools:context='.MainActivity' android:background='@color/bg'> <com.kiritor.mymodelclock.MyQAnalogClock android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_gravity='center' /> </LinearLayout>

相关文档
最新文档