目录摘要:.........................................................................................................................11.C#语言简介.................................................................................................................22.实现目标.....................................................................................................................23.主要方法.....................................................................................................................34.实验过程中的难点....................................................................................................35.实验过程.....................................................................................................................46.总结.............................................................................................................................6附录(源程序):...............................................................................................................7用C#实现时钟模拟用C#实现时钟模拟摘要:我们日常生活中有各种各样的时钟。随着计算机的普及和计算机科学的飞速发展人们开始越来越多的利用计算机解决实际问题,开发一个易于查看的时钟有较大的现实意义。VisualStudiio2008是面向WindowsVista、Office2007、Web2.0的下一代开发工具,其强大的兼容性以及高速处理能力帮助程序人员轻松应对研究、测试、开发过程中的各种问题。对于Web,ASPNETAJAX及其他新技术使开发人员能够迅速创建更高效、交互式更强和更个性化的新一代Web体验。本文基于VisualStudiio2008采用C#语言,应用GDI+应用程序编程借口(API)实现时钟模拟。关键词:C#开发时钟模拟GDI+VisualStudio2008第2页1.C#语言简介C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。C#旨在设计成为一种“简单、现代、通用”,以及面向对象的程序设计语言,此种语言的实现,应提供对于以下软件工程要素的支持:强类型检查、数组维度检查、未初始化的变量引用检测、自动垃圾收集(GarbageCollection,指一种自动内存释放技术)。软件必须做到强大、持久,并具有较强的编程生产力。此种语言为在分布式环境中的开发提供适用的组件开发应用。为使程序员容易迁移到这种语言,源代码的可移植性十分重要,尤其是对于那些已熟悉C和C++的程序员而言。对国际化的支持非常重要。C#适合为独立和嵌入式的系统编写程序,从使用复杂操作系统的大型系统到特定应用的小型系统均适用。C#是面向对象的编程语言。它使得程序员可以快速地编写各种基于MICROSOFT.NET平台的应用程序,MICROSOFT.NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。本文主要应用GDI+应用程序编程借口(API)实现时钟模拟。采用Form_Paint()方法。2.实现目标钟对我们来说非常熟悉,它有很多种类:摆钟、石英钟、机械闹钟、电摆钟、电子钟表等等。以前做过一个计时的钟表,而现在要做一个能读取当前时间的时钟,有时针、分针和秒针,与之相比,还是有很大的不同。(1)表盘背景设置对界面背景的设置,选择颜色设置或选择图片设置。(2)指针设置对界面上时针、分针、秒针以及各自的边框进行各自的颜色设置。(3)数字时钟设置设置调整设置系统时间,选择数字时钟在表盘上的位置,以及数字时钟的颜色设置。第3页3.主要方法采用Datatime获取时间,DateTime..Now获取系统当前时间投影到数字时钟和指针上,Form_Paint()方法描绘时钟指针,采用Invalidate()每隔1秒重绘窗口,Image()导入图片(按一定比例缩小)。注:图片重心位置和指针原点重合。4.实验过程中的难点1)导入钟表盘图片Image类为源自Bitmap和Metafile的类提供功能的抽象基类。Image类的公共成员:RawFormat获取此Image的文件格式。Size获取此图像的以像素为单位的宽度和高度。Tag获取或设置提供有关图像附加数据的对象。VerticalResolution获取此Image的垂直分辨率(以“像素/英寸”为单位)。Width获取此Image的宽度(以像素为单位)。解决方法:ImagenewImage1=Image.FromFile(4.png);//图片放在bin文件Debug里Rectangler3=newRectangle(50,50,200,200);g.DrawImage(newImage1,r3);//按指定大小绘制图形,图形大小为r12)重绘窗口,出现闪烁现象解决方法:Graphicsg=this.CreateGraphics();替换为:Graphicsg=e.Graphics;3)确定时针位置从圆上的某一点开始,依次旋转360度,满足从不同方向描绘指针,秒针间的间隔为6度。时针和分针类似,只是时间隔略有不同。描绘表针用到的方法:第4页ResetTransform()方法将此Graphics的世界变换矩阵重置为单位矩阵。TranslateTransform(single,single)方法通过使此Graphics的变换矩阵左乘指定的平移来更改坐标系统的原点。RotateTransform(angle)将指定旋转应用于此Graphics的变换矩阵。旋转角度(以度为单位)。DrawLine()绘制一条连接由坐标对指定的两个点的线条。解决方法://画出秒针inti=DateTime.Now.Second;//获取当前时间的秒数g.ResetTransform();g.TranslateTransform(center.X+r,center.Y+r);g.RotateTransform(i*6+270);PensecPen=newPen(Color.Red,3);secPen.StartCap=System.Drawing.Drawing2D.LineCap.RoundAnchor;secPen.EndCap=System.Drawing.Drawing2D.LineCap.ArrowAnchor;g.DrawLine(secPen,r-100,0,r-23,0);5.实验过程Image()插入钟表图片采用Image()方法,首先载入一个图片,图片大小设置为表盘大小,图片圆心与表盘圆心重合。刚开始使用TextureBrush刷入图片,但是无法控制图片位置所以改用Image(),实验证明该方法有很强大的控制能力,方便实用,实现对图片的多种操作。第5页绘制数字时钟和指针根据时针、分针、秒针每秒转的不同角度,计算他们在RotateTransform(angle)中角度的不同设置,然后DrawLine()方法绘制指针。最终实验效果图数字钟表通过DateTime()方法获取系统当前时间,DrawString()方法表达出来,调整数字钟表和指针表盘的位置,最后得到最终效果图如上所示。然后根据VS2008自带的打包程序,将程序打包为可安装程序exe,只需将该exe程序拷贝即可安装时钟。第6页6.总结在一个星期的课程设计之后,我们普遍感到不仅实际动手能力有所提高,更重要的是通过对编写程序流程的了解,进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。通过这次课程设计,我们拓宽了知识面,锻炼了能力,综合素质得到较大提高。同时我们也都认识到了自身的不足,几天实训下来,我们小组遇到了许多困难:1、一开始我们都是无从下手,不知道如何写代码显示表盘,绘制指针,后来根据老师的提示,通过修改最终解决了这个问题;2、我们小组希望能够在表盘内添加4个刻度,但是没能实现。虽然这次实训我们遇到过不少困难,有的解决了,有的不能解决,但是我们真的从中学到了很多,了解到了组员间合作的重要性,了解到自身的不足,同时也学到了许多在课堂上没能涉及到的知识。这次的课程设计为我们将来走向工作岗位、走向社会提供了一个很好的参照。在以后的学习工作中,我们会以坚持不懈的精神去努力提高自己的编程能力,在各方面都不放弃。在此,我们组衷心感谢帮助过我的老师和同学们。第7页附录(源程序):usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceClockApp{publicpartialclassForm5:Form{publicForm5(){InitializeComponent();}privatevoidForm5_Paint(objectsender,PaintEventArgse){//Graphicsg=this.CreateGraphics();Graphicsg=e.Graphics;Pointcenter=newPoint(50,50);intr=100;//数字时钟,这个时钟固定不动Rectangler1=newRectangle(50,10,200,20);g.FillRectangle(Brushes.Chocolate,r1);Stringm=Convert.ToString(DateTime.Now.Minute);Strings=Convert.ToString(DateTime.Now.Second);第8页Stringh=Convert.ToString(DateTime.Now.Hour);Fontf1=newFont(宋体,12,FontStyle.Bold);StringFormatsf1=newStringFormat();sf1.Alignment=StringAlignment.Center;SolidBrushs1=newSolidBrush(Color.White);g.DrawString(当前时间+h+:+m+:+s,f1,s1,r1,sf1);//画出秒针inti=DateTime.Now.Second;g.ResetTransform();g.TranslateTransfo