




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年度山东省泰安市新泰中学高二上学期第一次月考历史试题(含答案)
- 2025江苏盐城工学院招聘7人模拟试卷附答案详解(突破训练)
- 2025内蒙古通辽开鲁县教体系统招聘206人考前自测高频考点模拟试题及答案详解一套
- 2025安徽池州市贵池区招聘教师24人模拟试卷及答案详解(网校专用)
- 2025湖南株洲冶炼集团股份有限公司招聘技术管理1人模拟试卷及答案详解1套
- 2025可克达拉市花城街道公开招聘社区工作人员(6人)考前自测高频考点模拟试题及答案详解1套
- 2025年漳州能源社会招聘模拟试卷及一套答案详解
- 2025年齐齐哈尔工程学院博士人才招聘50人考前自测高频考点模拟试题及一套完整答案详解
- 2025黑龙江大庆市萨尔图区市场监督管理局招聘1人模拟试卷(含答案详解)
- 2025贵州省疾病预防控制中心第十三届贵州人才博览会引进4人考前自测高频考点模拟试题附答案详解(考试直接用)
- PICC堵管原因与再通方法
- 初中数学分层作业设计举例-有理数
- 给小学生科普化学
- 驾照体检表完整版本
- 成都中医药大学药学院毕业实习鉴定表
- 磁保持继电器基础知识课件
- 安全生产区域管理办法范本
- 2023-2024学年辽宁省沈阳市郊联体高二上学期10月月考物理试题(解析版)
- 设备保管协议
- 中石油职称英语通用教材
- 焊接质量手册
评论
0/150
提交评论