




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计科2011级VC+课程设计实验报告 题目:基于MFC的模拟时钟 班级:计科1104班 学号:1108030429 姓名:张宝龙 日期:2014/1/7课程设计实验报告1、题目:基于MFC的模拟时钟2、编程要点: 制作时钟的过程中,首先给时钟创建一个基类CClockElement,还需要派生类CClockBackground,CClockHourHand,CClockMinHand,CClockSecHand分别控制时钟的背景,时钟的时针,分针,秒针。3、实现过程:(1) 工程、风格、控件与变量表 本时钟是基本对话框的时钟,界面简约,便于使用。控件控件名控件类型Clock静态文本变量表变量名类型m_crMainCOLORREFm_crOtherCOLORREFm_tmCurCTimem_rcRegionCRectm_nRadiusintm_clockBKCClockBackgroundm_clockHourCClockHourHandm_clockMinCClockMinHandm_clockSecCClockSecHandm_rcClientCRectm_ClockCClockEX(2) 主要功能程序代码 CClockBackground:CClockBackground() /为时钟背景定义默认的颜色设置m_crMain=RGB(0,0,255);m_crOther=RGB(0,255,0);void CClockBackground:Draw(CDC *pDC)/设置准备环境CPen penMain(PS_SOLID,1,m_crMain),penOther(PS_SOLID,1,m_crOther);CBrush brMain(m_crMain),brOther(m_crOther);CPen *pOldPen=pDC-SelectObject(&penOther);CBrush *pOldBrush=pDC-SelectObject(&brMain);CPoint ptCenter=m_rcRegion.CenterPoint();int nRadius=m_nRadius-8;for(int i=0;iEllipse(rcDot);/绘制12个小方框,表示12个正点pDC-SelectObject(&penMain);pOldBrush=pDC-SelectObject(&brOther);for(i=0;iRectangle(rcDot);/huanyuan设备环境pDC-SelectObject(pOldPen);pDC-SelectObject(pOldBrush);CClockHourHand:CClockHourHand() /定义默认颜色m_crMain=RGB(0,0,128);m_crOther=RGB(128,128,0);void CClockHourHand:Draw(CDC *pDC)/设置准备环境CPen penMain(PS_SOLID,1,m_crMain),penOther(PS_SOLID,1,m_crOther);CBrush brMain(m_crMain),brOther(m_crOther);CPen *pOldPen=pDC-SelectObject(&penOther);CBrush *pOldBrush=pDC-SelectObject(&brMain);/确定当前指针的弧度int nTime=(m_tmCur.GetHour()%12)*3600;nTime+=m_tmCur.GetMinute()*60;nTime+=m_tmCur.GetSecond();double fRadian=2*PI*nTime/3600/12;/确定绘制菱形指针所需的四个角的坐标CPoint ptDiamond4;for(int i=0;iPolygon(ptDiamond,4);/huanyuan设备环境pDC-SelectObject(pOldPen);pDC-SelectObject(pOldBrush);CClockMinHand:CClockMinHand()/定义默认颜色 m_crMain=RGB(0,255,100);m_crOther=RGB(128,128,0);void CClockMinHand:Draw(CDC *pDC)/设置准备环境CPen penMain(PS_SOLID,1,m_crMain),penOther(PS_SOLID,1,m_crOther);CBrush brMain(m_crMain),brOther(m_crOther);CPen *pOldPen=pDC-SelectObject(&penOther);CBrush *pOldBrush=pDC-SelectObject(&brMain);/确定分针所在位置的弧度int nTime=m_tmCur.GetMinute()*60;nTime+=m_tmCur.GetSecond();double fRadian=2*PI*nTime/3600;/确定绘制菱形指针所需的四个角的坐标CPoint ptDiamond4;for(int i=0;iPolygon(ptDiamond,4);/huanyuan设备环境pDC-SelectObject(pOldPen);pDC-SelectObject(pOldBrush);CClockSecHand:CClockSecHand()/设定秒针的默认颜色 m_crMain=RGB(0,200,200);m_crOther=RGB(0,200,200);void CClockSecHand:Draw(CDC *pDC)int nTime=m_tmCur.GetSecond();CPoint ptStart=m_rcRegion.CenterPoint();CPoint ptEnd=ptStart;int nRadius=m_nRadius-10;ptEnd.Offset(int)(nRadius*sin(2*PI*nTime/60),(int)(-nRadius*cos(2*PI*nTime/60);CPen penMain(PS_SOLID,1,m_crMain);CPen*pOldPen=pDC-SelectObject(&penMain);pDC-MoveTo(ptStart);pDC-LineTo(ptEnd);pDC-SelectObject(pOldPen);void CClockEX:OnTimer(UINT nIDEvent) Invalidate(FALSE);CStatic:OnTimer(nIDEvent);void CClockEX:OnSize(UINT nType, int cx, int cy) CStatic:OnSize(nType, cx, cy);GetClientRect(m_rcClient); /获取当前客户区m_clockBK.SetRegion(m_rcClient);m_clockHour.SetRegion(m_rcClient);m_clockMin.SetRegion(m_rcClient);m_clockSec.SetRegion(m_rcClient);void CClockEX:OnPaint() CPaintDC dc(this); / device context for painting/实现双缓冲绘图-防止屏幕闪烁CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmp;bmp.CreateCompatibleBitmap(&dc,m_rcClient.Width(),m_rcClient.Height();dcMem.SelectObject(&bmp);DrawClock(&dcMem); /绘制时钟dc.BitBlt(0,0,m_rcClient.Width(),m_rcClient.Height(),&dcMem,0,0,SRCCOPY);void CClockEX:PreSubclassWindow() GetClientRect(m_rcClient); /获取当前客户区m_clockBK.SetRegion(m_rcClient);m_clockHour.SetRegion(m_rcClient);m_clockMin.SetRegion(m_rcClient);m_clockSec.SetRegion(m_rcClient);SetTimer(1,100,NULL);CStatic:PreSubclassWindow();void CClockEX:DrawClock(CDC *pDC)CTime tmCur=CTime:GetCurrentTime();m_clockBK.SetTime(tmCur);m_clockHour.SetTime(tmCur);m_clockMin.SetTime(tmCur);m_clockSec.SetTime(tmCur);m_clockBK.Draw(pDC);m_clockHour.Draw(pDC);m_clockMin.Draw(pDC);m_clockSec.Draw(pDC);CClockElement:CClockElement() m_nRadius=0; m_crMain=RGB(255,0,0); m_crOther=RGB(128,128,0);void CClockElement:SetRegion(LPRECT lprcRect) m_rcRegion=lprcRect; m_nRadius=m_rcRegion.Width()/2; if(m_rcRegion.Width()m_rcRegion.Height() m_nRadius=m_rcRegion.Height()/2; void CClockElement:SetTime(const CTime &tmCur)m_tmCur=tmCur;void CClockElement:SetColor(COLORREF crMain,COLORREF crOther) m_crMain=crMain; m_crOther=crOther;4、运行效果展示:5、自我总结: 该小程序是基于MFC中的对话框的,主要针对画笔和画刷的用法,没有涉及连接数据库和算法,完全是为了本学期所学知识的运用,由于时间紧,所以没能深入的探索MFC的奥妙,不过通过本次设计,我对老师课堂上所讲述的关于该类型的知识,有了进一步的了解和掌握,初步的熟悉了画笔和画刷的简单用法,还巩固了MFC类中的基本操作,例如,添加新类,新变量,创建新的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高效领域自适应故障诊断模型的研究
- 个性化心理护理对老年心脑血管患者管理效能及满意度提升研究
- 设计绿色现代数智供应链的数据管理体系:“一库两字典”的创新实践
- 爆炸与安全课件
- 城市交通噪声控制技术发展趋势与设计要点研究
- 燃气行业职业病培训课件
- 网络设备与网管系统施工管理策略
- 密码管理师岗位面试问题及答案
- 语言技术对社会语言的影响-洞察阐释
- 家电用户行为分析与应用-洞察阐释
- THMDSXH 003-2023 电商产业园区数字化建设与管理指南
- 新建ICU镇痛、镇静药物应用幻灯片
- 2020年上海市中考语数英物化五科试卷及答案
- 橡胶和基材的粘接
- GA/T 935-2011法庭科学枪弹痕迹检验鉴定文书编写规范
- 湖北省黄石市基层诊所医疗机构卫生院社区卫生服务中心村卫生室信息
- DB44-T 2163-2019山地自行车赛场服务 基本要求-(高清现行)
- 工伤责任保险单
- 围堰施工监理实施细则
- 《世界经济史》课程教学大纲
- 小学语文一到六年级生字表
评论
0/150
提交评论