ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:174.75KB ,
资源ID:4312233      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4312233.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(时钟设计课程论文.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

时钟设计课程论文.docx

1、时钟设计课程论文西北农林科技大学信息工程学院C+实习报告(或论文)题 目: 桌面时钟的设计与实现 目 录一、综合训练目的与要求 1二、综合训练任务 1三、总体设计 1四、详细设计说明 1五、调试与测试 1六、实习日志 1七、实习总结 1八、附录:核心代码清单 1一、综合训练目的与要求正文训练的目的:通过实习对以前所学的面向对象C+能够有一个更好的了解,可以熟练的运用C+,做到学以致用;对Visual Studio 2005可以较为熟练的操作,可以熟练的运用Visual Studio 2005编译代码,调试程序;通过这两个礼拜的实习,了解并可以运用MFC设计界面,以及各类消息的函数实现,为这次实

2、习打好基础。训练的要求: 在实习期间,每天要按时到达实习地点,尽量不迟到或是早退,并且到了之后应该尽快进入状态,抓紧时间;在两周的实习之中,自己应该做好安排和计划,知道在每个时间段应该做些什么,最重要的是一定要在每个时间段内,提前或是按时完成自己规定的任务,以便为以后的任务留下充足时间;在设计界面与编程阶段要有耐心,细心,认真完成每一模块的制作,并且细心的发现问题,解决问题,最后完成设计,做出令自己满意的成果。二、综合训练任务(1)采用面向对象的思想设计设计一个CClokDlg类用于实现桌面时钟,进而完成桌面时钟的设计与实现; (2)编译并调试程序,不断的发现问题,并且解决问题,使桌面时钟的各

3、种功能都能够完全实现,最后使程序尽量少一些缺陷。三、总体设计(1)界面设置:表盘背景设置:对界面背景的设置,分为选择颜色设置或选择图片设置。表盘刻度设置:对界面上整点刻度的形状设置如三角形、方形、菱形,颜色调色设置。指针设置:对界面上时针、分针、秒针以及各自的边框进行各自的颜色设置。日期设置:选择日期在表盘上的位置,是否隐藏,以及日期的颜色设置。数字时钟设置:调整设置系统时间,选择数字时钟在表盘上的位置,以及数字时钟的颜色设置。(2)时间设置:闹钟设置:设置响铃时间,闹钟的铃声设置,选择自己喜欢的歌曲,或者选择蜂鸣铃声。系统时间设置:校准系统时间。(3)关闭闹钟。核心类CMyclockDlg类

4、,使所有各个功能的信息交流处理都在这里进行:类之间的关系图如下图3.1所示:图3.1四、详细设计说明4.1界面设置 1.背景设置如下图4.1所示:图4.1背景设置分为颜色背景和图像背景。二者只能选择其一。选择颜色背景设置,可以对表盘背景进行颜色设置,将表盘设置为用户所喜欢的颜色;选择图像背景设置,可以对表盘进行图片设置,选好图片的存储路径,就可以将表盘设置为用户所喜欢的图片。主要代码如下所示:void CCMyClockDlg:OnSetBkg() / TODO: 在此添加命令处理程序代码 BackSetDlg dlg; dlg.m_bPicture = m_bPicture; dlg.m_c

5、olorBK = m_colorBK; dlg.m_StrBK = m_strBK; dlg.m_model = m_model; if(dlg.DoModal() = IDOK) m_bPicture = dlg.m_bPicture; m_model = dlg.m_bPicture; m_colorBK = dlg.m_colorBK; m_strBK = dlg.m_StrBK; m_model = dlg.m_model; Invalidate(); 2.表盘设置如下图4.2所示:图4.2表盘设置分为表盘刻度的颜色设置和表盘的样式设置:选择刻度样式设置可以将刻度设置成三角形、菱形、方

6、形、圆形其中之一;选择刻度颜色设置可以将刻度的颜色改成你所喜欢的颜色。主要代码如下所示:void CCMyClockDlg:OnSetScale() ScaleSetDlg dlg; dlg.m_type = m_ClockScale.GetScaleStyle(); dlg.m_color = m_ClockScale.GetScaleColor(); dlg.m_logcolor = m_ClockScale.GetLogColor(); if(dlg.DoModal() = IDOK) m_ClockScale.SetScaleStyle(MAJORTYPE(dlg.m_type); m

7、_ClockScale.SetScaleColor(dlg.m_color); m_ClockScale.SetLogColor(dlg.m_logcolor); Invalidate(); / TODO: 在此添加命令处理程序代码3.指针设置如下图4.3所示:图4.3指针设置分为指针颜色设置和指针边框颜色设置:对界面上时针、分针、秒针以及各自的边框进行各自的颜色设置。主要代码如下:void CCMyClockDlg:OnSetHand() HandSetDlg dlg; m_Clockhand.GethandColor(dlg.m_HColor,dlg.m_HbordColor, dlg.m

8、_MColor,dlg.m_MBordColor, dlg.m_SbordColor); if(dlg.DoModal() = IDOK) m_Clockhand.SethandColor(dlg.m_HColor,dlg.m_HbordColor, dlg.m_MColor,dlg.m_MBordColor, dlg.m_SbordColor); Invalidate(); / TODO: 在此添加命令处理程序代码4.2时间设置 1.系统时间设置如下图4.4所示:图4.4系统时间设置:对系统时间继续校准。主要的代码如下:void CCMyClockDlg:OnSetSysTime() / T

9、ODO: 在此添加命令处理程序代码 SystemTimeSetDlg dlg; if(dlg.DoModal() = IDOK) SYSTEMTIME time; GetSystemTime(&time); time.wHour = dlg.m_hour; time.wMinute = dlg.m_minute; time.wSecond = dlg.m_second; SetLocalTime(&time); UpdateData(true); 2.闹钟设置如下图4.5所示:图4.5闹钟设置分为闹钟时间设置和闹钟铃声设置:设置响铃时间,闹钟的铃声设置,选择自己喜欢的歌曲,或者选择蜂鸣铃声。主

10、要代码如下:void CCMyClockDlg:Alarm()/判断是否响铃 if(m_clock.m_Sound) if(m_clock.m_strAlarmMusic!=) bool bend = PlaySound(m_clock.m_strAlarmMusic,NULL,MessageBox(_T(闹钟时间到了!nn铃声:)+m_clock.m_strAlarmMusic,_T(温馨提示); else MessageBox(_T(闹铃时间到了!nn铃声无法打开铃声:+m_clock.m_strAlarmMusic,_T(温馨提示); else BeepThread(this); Mes

11、sageBox(_T(闹铃时间到了!nn 蜂鸣声),_T(温馨提示); void CCMyClockDlg:OnTimeAlarm()/选择铃声 / TODO: 在此添加命令处理程序代码 AlarmSetDlg dlg; dlg.m_bMusic = m_clock.m_bMusic; dlg.m_bSound = m_clock.m_Sound; dlg.m_strAlarmMusic = m_clock.m_strAlarmMusic; dlg.m_typeBeep = m_clock.m_typebeep; if(dlg.DoModal() = IDOK) m_clock.m_bMusi

12、c = dlg.m_bMusic; m_clock.m_Sound = dlg.m_bSound; m_clock.m_strAlarmMusic = dlg.m_strAlarmMusic; m_clock.m_typebeep = dlg.m_typeBeep; m_clock.oTime.wYear = dlg.m_pickerTime.GetYear(); m_clock.oTime.wMonth = dlg.m_pickerTime.GetMonth(); m_clock.oTime.wDay = dlg.m_pickerTime.GetDay(); m_clock.oTime.wH

13、our = dlg.m_hour; m_clock.oTime.wMinute = dlg.m_minute; m_clock.oTime.wSecond = dlg.m_second; 指针及表盘上各点的位置确定:CPoint CClockScale:ComputerFacePoint(UINT min,int nFaceLength) CPoint ptCalc; const double PI = 3.141592653; double fDegrees = 180+(15+min)%60)*6; double fAngle = fDegrees/180; ptCalc.x = m_pt

14、Middle.x + (int)(cos(fAngle*PI)*nFaceLength); ptCalc.y = m_ptMiddle.y + (int)(sin(fAngle*PI)*nFaceLength); return (ptCalc);五、调试与测试1、在设置背景的时候,开始背景图片一致贴不到表盘上面,显示不出来效果,后来发现时读取图片路径的时候,类型转化不正确,读取的路径都是乱码,后来找到方法把类型转化好了,但是问题依然没解决,后来经过老师的指导,才发现是图片的格式不正确,后来图片格式弄好,就成功了。2、在计算表盘指针坐标的时候,总出现意外,最后没办法,一遍一遍的跟踪,将跟踪记录记

15、录到纸上分析,最后是几个坐标颠倒了,改正后就好了。六、实习日志2月25日2月26日:通过网络和相关书籍了解有关时钟的相关知识,熟悉桌面时钟的运转规则和其主要算法,以及如何设置闹钟,添加背景,;2月27日2月28日:下载有关MFC的相关资料,并且在尽量在最短的时间内学会一些基本知识,例如如何生成对话框,为按钮添加消息函数等;3月01日:在Visual Studio S2005中设计出时钟所需要的各种对话框,以及相应按钮,并且为按钮添加消息响应函数;3月02日3月05日:为各种消息相应函数实现其功能,实现时钟的走时对时和闹钟,数字时钟以及当前日期的显示,设置界面所有项目的颜色设置;3月06日3月0

16、7日:完成实施计划书和课程论文的制作,并且为课程答辩做好相关的准备。七、实习总结这两个周的面向对象课程设计,时间上说长不长,说短也不短,却让我学到了很多,第一点就是:MFC以前从来没有听过的名词,现在我就知道了用它可以设计界面,还可以使用它,尽管不是很熟练。还有VS2005真的很强大,跟它相比,codeblocks就只是合适教学,开发软件差很多。你觉得自己了解一点,是总会发现还有很多自己所不懂的东西,还有很多自己所没探知的领域,很多知识运用到实践中很有一定的难度,看着自己和同学的程序运行结果,突然发现C+真的很神奇,居然能做出那么漂亮的软件。在我们上机调试程序的过程中,我遇到了很多的问题,说实

17、话这次课程设计自己没有出多大的力,好多东西多是借鉴书上的,自己设计是总是觉得没有头绪,无从下手。后来我发现把书多看几遍真的会有很多收获,对自己的编程也会有很大的提高。我觉得课程设计不仅让我们巩固了所学的知识,还使得我们学习到了更多平时所忽略的,最重要的是,它磨砺了我们,让我们在大学的下一个阶段能更好的成长。八、附录:核心代码清单CCMyClockDlg:CCMyClockDlg(CWnd* pParent /*=NULL*/) : CDialog(CCMyClockDlg:IDD, pParent) m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);

18、m_strBK = .BMP1.bmp;/初始化表盘背景 m_colorBK = RGB(255,255,255); m_bPicture = TRUE; m_model = 1; SYSTEMTIME time; GetLocalTime(&time); m_oTime = time; m_nMinute = time.wMinute; m_nHour = time.wHour; if(m_nHour12) m_nHour = m_nHour-12; m_nSecond = time.wSecond; m_numShow = 1; m_dateShow = 1;BOOL CCMyClockD

19、lg:OnInitDialog() CDialog:OnInitDialog(); / 将“关于.”菜单项添加到系统菜单中。 / IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); / 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 / 执行此操作 SetIcon(m_hIcon,

20、 TRUE); / 设置大图标 SetIcon(m_hIcon, FALSE); / 设置小图标 / TODO: 在此添加额外的初始化代码 SetTimer(1,1000,NULL); return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid CCMyClockDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); else CDialog:OnSysCommand(nID, lParam); /

21、如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void CCMyClockDlg:OnPaint() CPaintDC dc(this); CRect rectClient; GetClientRect(&rectClient); CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap bmp; bmp.CreateCompatibleBitmap(&dc,rectClient.Width(),rectClient.Height(); memDC.SelectObje

22、ct(&bmp); if(m_bPicture) CDC bkDC; bkDC.CreateCompatibleDC(&memDC); HBITMAP hbitMap; CBitmap bitmap; /LPSTR str = m_strBK.GetString(); hbitMap = (HBITMAP):LoadImageW(:AfxGetInstanceHandle(),m_strBK,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); if(hbitMap = 0) m_bPicture =false; return ; bit

23、map.Attach(hbitMap); BITMAP pbmp; bitmap.GetBitmap(&pbmp); int bh = pbmp.bmHeight; int bw = pbmp.bmWidth; bkDC.SelectObject(&bitmap); if(m_model) memDC.StretchBlt(0,0,rectClient.Width(),rectClient.Height(),&bkDC,0,0,bw,bh,SRCCOPY); else int sx = (rectClient.Width() - bw)/2; int sy = (rectClient.Heig

24、ht() - bh)/2; memDC.BitBlt(sx,sy,bw,bh,&bkDC,0,0,SRCCOPY); else CBrush bkBrush(m_colorBK); memDC.FillRect(&rectClient,&bkBrush); m_ptMiddle.x = rectClient.Width()/2; m_ptMiddle.y = rectClient.Height()/2 - 15; double m_nRidius = min(m_ptMiddle.x,m_ptMiddle.y); m_nPointWidth = (int)m_nRidius/20; m_Clo

25、ckScale.DrawScale(&memDC,m_ptMiddle); m_Clockhand.DrawHand(&memDC,m_nMinute,MINUTE_TYPE,m_ptMiddle,m_oTime);/这里两个参数要初始化 m_Clockhand.DrawHand(&memDC,m_nHour,HOUR_TYPE,m_ptMiddle,m_oTime);/这里两个参数要初始化 m_Clockhand.DrawHand(&memDC,m_nSecond,SECOND_TYPE,m_ptMiddle,m_oTime);/这里两个参数要初始化 if(m_nPointWidth 6)

26、if(m_numShow) m_ClockNum.DrawTme(&memDC,rectClient,m_oTime); if(m_dateShow) m_ClockDate.DrawDate(&memDC,rectClient,m_oTime); dc.StretchBlt(0,0,rectClient.Width(),rectClient.Height(),&memDC,0,0,rectClient.Width(), rectClient.Height(),SRCCOPY); if (IsIconic() CPaintDC dc(this); / 用于绘制的设备上下文 SendMessag

27、e(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0); / 使图标在工作矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; / 绘制图标 dc.DrawIcon(x, y, m

28、_hIcon); else CDialog:OnPaint(); /当用户拖动最小化窗口时系统调用此函数取得光标显示。/HCURSOR CCMyClockDlg:OnQueryDragIcon() return static_cast(m_hIcon);BOOL CCMyClockDlg:OnEraseBkgnd(CDC* pDC)/避免闪屏问题。 / TODO: 在此添加消息处理程序代码和/或调用默认值 return true;void CCMyClockDlg:OnTimer(UINT_PTR nIDEvent) / TODO: 在此添加消息处理程序代码和/或调用默认值 SYSTEMTIME time; GetLocalTime(&time); m_oTime = time; m_nSecond = time.wSecond; m_nMinute = time.wMinute; m_nHour = time.wHour; if(IsAlarmTime() Alarm(); Invalidate(); CDialog:OnTimer(nIDEvent);bool CCMyClockDlg:IsAlarmTime() bool bYear = (m_clock.oTime.wYear = m

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

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