VC++课程设计--基于MFC的模拟时钟.doc_第1页
VC++课程设计--基于MFC的模拟时钟.doc_第2页
VC++课程设计--基于MFC的模拟时钟.doc_第3页
VC++课程设计--基于MFC的模拟时钟.doc_第4页
VC++课程设计--基于MFC的模拟时钟.doc_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论