指针式时钟.docx

上传人:b****2 文档编号:1611824 上传时间:2022-10-23 格式:DOCX 页数:13 大小:57.01KB
下载 相关 举报
指针式时钟.docx_第1页
第1页 / 共13页
指针式时钟.docx_第2页
第2页 / 共13页
指针式时钟.docx_第3页
第3页 / 共13页
指针式时钟.docx_第4页
第4页 / 共13页
指针式时钟.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

指针式时钟.docx

《指针式时钟.docx》由会员分享,可在线阅读,更多相关《指针式时钟.docx(13页珍藏版)》请在冰豆网上搜索。

指针式时钟.docx

指针式时钟

XX大学

课程设计说明书

 

学生XX:

学号:

学院:

专业:

题目:

指针式时钟

 

指导 职称:

 

2013年1月11日

 

XX大学

课程设计任务书

12/13学年第一学期

 

学院:

专业:

学生姓名:

学号:

题目:

指针式时钟

起迄日期:

课程设计地点:

指导教师:

系主任:

 

下达任务书日期:

2012年12月24日

课程设计任务书

1.设计目的:

综合应用VC++的各种编程知识和技巧进行程序设计的能力,最终掌握面向对象的编程技术。

通过本次课程设计,培养自主学习和独立创新能力。

2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):

功能说明:

使用计时器创建一个时钟。

(1)计时器是程序中最常用的后台任务机制之一,其时间间隔最低约55毫秒,被广泛用于时钟、磁盘备份程序或需要在某一时刻运行的程序等。

(2)多媒体计时器能编程设定1毫秒或者更小,它是诸如MIDI序列发生器之类的专用型应用程序的理想选择,在WindowsAPI中有很多查询时钟的函数,利用它们就可以编写出高精度的计时器。

设计方案:

程序所实现的功能:

运行界面是一指针式时钟,有时分秒三个指针,有12个钟点数字的显示,并通过指针的转动来实现时间的更新。

设计分析:

了解两个函数:

CWnd:

:

SetTimer()函数用来设置一个计时器以指定的时间间隔触发,CWnd:

KillTimer()函数用来使一个正在运行的计时器停止。

建立一个MFC单个文档应用程序工程;打开MFCClassWizard,为1view类添加OnCreate和Ontimer函数,在视图类中添加3个方法:

编辑OnCreate方法的代码,用来设置时钟。

编辑OnTimer方法用来更新窗口。

编辑OnDraw方法的代码,实现绘制时钟。

创建视图消息处理函数,初始化计时器,通过一个计时器消息,使视图一秒发送一次消息,以保证时间的准确性。

计时器消息处理函数。

流程图如下:

开始

绘制椭圆

 

绘制钟点

 

绘制时钟、分钟、秒钟针

初始化计时器

计时器处理

结束

3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:

本题主要涉及到的知识点有:

时钟指针运动算法、屏幕重绘方法、定时器消息、菜单命令、对话框、画笔/画刷、显示文字等。

指针运动算法和屏幕重绘方法是本程序主要难点所在。

不论何种指针,每次转动均以π/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。

计算指针端点(x,y)的公式如下:

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

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

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

三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。

(1)OnDraw()函数实现对系统时间的获取和绘制椭圆表面和时钟指针。

(2)设置计时器,创建窗口时启动一个计时器不断发出WM_TIMER消息,调用SetTimer()函数。

(3)用TextOut()函数显示数字钟。

(4)添加菜单,用菜单项控制弹出对话框设置显示的时间。

课程设计任务书

4.主要参考文献:

VisualC++课程设计案例精编

《VisualC++程序设计——基础与实例分析》,朱晴婷,黄海鹰,陈莲君,清华大学。

《VisualC++6.0开发技巧与实例教程》,同志工作室,人民邮电。

《VisualC++6.0面向对象程序设计教程》,刘瑞新,机械工业。

5.设计成果形式及要求:

程序运行结果;

课程设计说明书。

6.工作计划及进度:

2012年12月24日~2012年12月28日:

查资料

2012年12月29日~2013年1月3日:

在指导教师指导下设计方案及程序

2013年1月4日~2013年1月8日:

学生上机调试程序,指导教师辅导

2013年1月9日~2013年1月11日:

完成课程设计说明书

2013年1月11日:

答辩

系主任审查意见:

签字:

年月日

 

摘要……………………………………………………………….1

关键词…………………………………………………………….2

设计目的、意义.......................................3

设计内容.............................................4

结果分析.............................................5

设计心得.............................................6

参考文献.............................................7

运行结果.............................................8

 

摘要:

计时器是程序中最常用的后台任务机制之一,其时间间隔最低约55毫秒,被广泛用于时钟、磁盘备份程序或需要在某一时刻运行的程序等。

而模拟时钟是一种集计时器和时钟显示于一体的程序。

以实例为背景学习基于MFC的WINDOWS应用程序设计,编写一个指针式时钟程序,此程序在屏幕正中有一个指针式钟面。

指针式的时钟表盘为椭圆形或圆形,并且圆周上有分布均匀的12个刻度,刻度要求显示清晰,钟面上有长度和颜色及粗细各不相同的指针,即时针、分针、秒针,以便各个指针重合时亦可以轻易辨认,指针的运动要求具有规律性,且为顺时针。

关键词:

指针式时钟

设计目的、意义:

综合应用VC++的各种编程知识和技巧进行程序设计的能力,最终掌握面向对象的编程技术。

通过本次课程设计,培养自主学习和独立创新能力。

设计内容:

(正文)

voidCMy2View:

:

OnDraw(CDC*pDC)

{

CMy2Doc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

//TODO:

adddrawcodefornativedatahere

RECTRect;

GetClientRect(&Rect);//计算椭圆中心位置

intCenterX=Rect.right/2;

intCenterY=Rect.bottom/2;

CTimeTime=CTime:

:

GetCurrentTime();

CStringstr;

inti,x,y;

CSizesize;//创建一支画笔,用来画椭圆

CPenPen(PS_SOLID,5,RGB(0,0,0));//设置当前画笔,并记下以前的现笔

CPen*OldPen=pDC->SelectObject(&Pen);//绘制钟面椭圆

pDC->Ellipse(5,5,Rect.right-5,Rect.bottom-5);

doubleRadians;//设置字体

pDC->SetTextColor(RGB(255,0,0));

for(i=1;i<=12;i++)

{

str.Format("%d",i);

size=pDC->GetTextExtent(str,str.GetLength());

Radians=(double)i*6.28/12.0;//计算钟点放置的位置

x=CenterX-(size.cx/2)+(int)((double)(CenterX-20)*sin(Radians));

y=CenterY-(size.cy/2)-(int)((double)(CenterY-20)*cos(Radians));

//绘制钟点

pDC->TextOut(x,y,str);

}

//计算时钟指针的夹角

Radians=(double)Time.GetHour()+(double)Time.GetMinute()/60.0+(double)Time.GetSecond()/3600.0;

Radians*=6.28/12.0;

//创建时钟指针画笔

CPenHourPen(PS_SOLID,5,RGB(100,200,100));

pDC->SelectObject(&HourPen);

//绘制时钟指针

pDC->MoveTo(CenterX,CenterY);

pDC->LineTo(CenterX+(int)((double)(CenterX/3)*sin(Radians)),CenterY-(int)((double)(CenterY/3)*cos(Radians)));

Radians=(double)Time.GetMinute()+(double)Time.GetSecond()/60.0;

Radians*=6.28/60.0;

//创建分钟指针画笔

CPenMinutePen(PS_SOLID,3,RGB(0,0,255));

pDC->SelectObject(&MinutePen);

//绘制分钟指针

pDC->MoveTo(CenterX,CenterY);

pDC->LineTo(CenterX+(int)((double)(CenterX*2)/3)*sin(Radians),CenterY-(int)((double)(CenterY*2/3)*cos(Radians)));

Radians=(double)Time.GetSecond();

Radians*=6.28/60.0;

//创建秒钟指针画笔

CPenSecondPen(PS_SOLID,1,RGB(0,25,0));

pDC->SelectObject(&SecondPen);

//绘制秒钟指针

pDC->MoveTo(CenterX,CenterY);

pDC->LineTo(CenterX+(int)((double)(CenterX*4)/5)*sin(Radians),CenterY-(int)((double)(CenterY*4)/5*cos(Radians)));

pDC->SelectObject(OldPen);

//TODO:

adddrawcodefornativedatahere

}

voidCMy2View:

:

OnTimer(UINTnIDEvent)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

InvalidateRect(NULL,true);

UpdateWindow();

CView:

:

OnTimer(nIDEvent);

}

intCMy2View:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)

{

if(CView:

:

OnCreate(lpCreateStruct)==-1)

return-1;

//TODO:

Addyourspecializedcreationcodehere

SetTimer(1,1000,NULL);

return0;

}

结果分析:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1