VC++课程设计基于MFC的模拟时钟.docx

上传人:b****7 文档编号:9266324 上传时间:2023-02-03 格式:DOCX 页数:12 大小:33.86KB
下载 相关 举报
VC++课程设计基于MFC的模拟时钟.docx_第1页
第1页 / 共12页
VC++课程设计基于MFC的模拟时钟.docx_第2页
第2页 / 共12页
VC++课程设计基于MFC的模拟时钟.docx_第3页
第3页 / 共12页
VC++课程设计基于MFC的模拟时钟.docx_第4页
第4页 / 共12页
VC++课程设计基于MFC的模拟时钟.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

VC++课程设计基于MFC的模拟时钟.docx

《VC++课程设计基于MFC的模拟时钟.docx》由会员分享,可在线阅读,更多相关《VC++课程设计基于MFC的模拟时钟.docx(12页珍藏版)》请在冰豆网上搜索。

VC++课程设计基于MFC的模拟时钟.docx

VC++课程设计基于MFC的模拟时钟

VC++课程设计--基于MFC的模拟时钟

计科2011级

VC++课程设计实验报告

 

题目:

基于MFC的模拟时钟

 

班级:

计科1104班

学号:

1108030429

姓名:

张宝龙

日期:

2014/1/7

 

课程设计实验报告

1、题目:

基于MFC的模拟时钟

2、编程要点:

制作时钟的过程中,首先给时钟创建一个基类CClockElement,还需要派生类CClockBackground,CClockHourHand,CClockMinHand,CClockSecHand分别控制时钟的背景,时钟的时针,分针,秒针。

3、实现过程:

(1)工程、风格、控件与变量表

本时钟是基本对话框的时钟,界面简约,便于使用。

控件

控件名

控件类型

Clock

静态文本

变量表

变量名

类型

m_crMain

COLORREF

m_crOther

COLORREF

m_tmCur

CTime

m_rcRegion

CRect

m_nRadius

int

m_clockBK

CClockBackground

m_clockHour

CClockHourHand

m_clockMin

CClockMinHand

m_clockSec

CClockSecHand

m_rcClient

CRect

m_Clock

CClockEX

(2)主要功能程序代码

CClockBackground:

:

CClockBackground()

{

//为时钟背景定义默认的颜色设置

m_crMain=RGB(0,0,255);

m_crOther=RGB(0,255,0);

}

voidCClockBackground:

:

Draw(CDC*pDC)

{

//设置准备环境

CPenpenMain(PS_SOLID,1,m_crMain),penOther(PS_SOLID,1,m_crOther);

CBrushbrMain(m_crMain),brOther(m_crOther);

CPen*pOldPen=pDC->SelectObject(&penOther);

CBrush*pOldBrush=pDC->SelectObject(&brMain);

CPointptCenter=m_rcRegion.CenterPoint();

intnRadius=m_nRadius-8;

for(inti=0;i<60;i++)

{

CPointptEnd=ptCenter;

ptEnd.Offset((int)(nRadius*sin(2*PI*(i%60)/60)),(int)(-nRadius*cos(2*PI*(i%60)/60)));

CRectrcDot(-2,-2,2,2);

rcDot.OffsetRect(ptEnd);

pDC->Ellipse(rcDot);

}

//绘制12个小方框,表示12个正点

pDC->SelectObject(&penMain);

pOldBrush=pDC->SelectObject(&brOther);

for(i=0;i<12;i++)

{

CPointptEnd=ptCenter;

doublefRadian=2*PI*(i%12)/12;

ptEnd.Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));

CRectrcDot(-3,-3,3,3);

rcDot.OffsetRect(ptEnd);

pDC->Rectangle(rcDot);

}

//huanyuan设备环境

pDC->SelectObject(pOldPen);

pDC->SelectObject(pOldBrush);

}

CClockHourHand:

:

CClockHourHand()

{

//定义默认颜色

m_crMain=RGB(0,0,128);

m_crOther=RGB(128,128,0);

}

voidCClockHourHand:

:

Draw(CDC*pDC)

{

//设置准备环境

CPenpenMain(PS_SOLID,1,m_crMain),penOther(PS_SOLID,1,m_crOther);

CBrushbrMain(m_crMain),brOther(m_crOther);

CPen*pOldPen=pDC->SelectObject(&penOther);

CBrush*pOldBrush=pDC->SelectObject(&brMain);

//确定当前指针的弧度

intnTime=(m_tmCur.GetHour()%12)*3600;

nTime+=m_tmCur.GetMinute()*60;

nTime+=m_tmCur.GetSecond();

doublefRadian=2*PI*nTime/3600/12;

//确定绘制菱形指针所需的四个角的坐标

CPointptDiamond[4];

for(inti=0;i<4;i++)

{

ptDiamond[i]=m_rcRegion.CenterPoint();

}

intnRadius=m_nRadius/2;

ptDiamond[0].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));

fRadian+=0.5*PI;

nRadius=m_nRadius/20;

ptDiamond[1].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));

fRadian+=0.5*PI;

nRadius=m_nRadius/10;

ptDiamond[2].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));

fRadian+=0.5*PI;

nRadius=m_nRadius/20;

ptDiamond[3].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));

//绘制菱形时钟

pDC->Polygon(ptDiamond,4);

//huanyuan设备环境

pDC->SelectObject(pOldPen);

pDC->SelectObject(pOldBrush);

}

CClockMinHand:

:

CClockMinHand()

{

//定义默认颜色

m_crMain=RGB(0,255,100);

m_crOther=RGB(128,128,0);

}

voidCClockMinHand:

:

Draw(CDC*pDC)

{

//设置准备环境

CPenpenMain(PS_SOLID,1,m_crMain),penOther(PS_SOLID,1,m_crOther);

CBrushbrMain(m_crMain),brOther(m_crOther);

CPen*pOldPen=pDC->SelectObject(&penOther);

CBrush*pOldBrush=pDC->SelectObject(&brMain);

//确定分针所在位置的弧度

intnTime=m_tmCur.GetMinute()*60;

nTime+=m_tmCur.GetSecond();

doublefRadian=2*PI*nTime/3600;

//确定绘制菱形指针所需的四个角的坐标

CPointptDiamond[4];

for(inti=0;i<4;i++)

{

ptDiamond[i]=m_rcRegion.CenterPoint();

}

intnRadius=m_nRadius/4;

ptDiamond[0].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));

fRadian+=0.5*PI;

nRadius=m_nRadius/20;

ptDiamond[1].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));

fRadian+=0.5*PI;

nRadius=m_nRadius/10;

ptDiamond[2].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));

fRadian+=0.5*PI;

nRadius=m_nRadius/20;

ptDiamond[3].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));

//绘制菱形时钟

pDC->Polygon(ptDiamond,4);

 

//huanyuan设备环境

pDC->SelectObject(pOldPen);

pDC->SelectObject(pOldBrush);

}

CClockSecHand:

:

CClockSecHand()

{

//设定秒针的默认颜色

m_crMain=RGB(0,200,200);

m_crOther=RGB(0,200,200);

}

voidCClockSecHand:

:

Draw(CDC*pDC)

{

intnTime=m_tmCur.GetSecond();

CPointptStart=m_rcRegion.CenterPoint();

CPointptEnd=ptStart;

intnRadius=m_nRadius-10;

ptEnd.Offset((int)(nRadius*sin(2*PI*nTime/60)),(int)(-nRadius*cos(2*PI*nTime/60)));

CPenpenMain(PS_SOLID,1,m_crMain);

CPen*pOldPen=pDC->SelectObject(&penMain);

pDC->MoveTo(ptStart);

pDC->LineTo(ptEnd);

pDC->SelectObject(pOldPen);

}

voidCClockEX:

:

OnTimer(UINTnIDEvent)

{

Invalidate(FALSE);

CStatic:

:

OnTimer(nIDEvent);

}

voidCClockEX:

:

OnSize(UINTnType,intcx,intcy)

{

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);

}

voidCClockEX:

:

OnPaint()

{

CPaintDCdc(this);//devicecontextforpainting

//实现双缓冲绘图---防止屏幕闪烁

CDCdcMem;

dcMem.CreateCompatibleDC(&dc);

CBitmapbmp;

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);

}

voidCClockEX:

:

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();

}

voidCClockEX:

:

DrawClock(CDC*pDC)

{

CTimetmCur=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);

}

voidCClockElement:

:

SetRegion(LPRECTlprcRect)

{

m_rcRegion=lprcRect;

m_nRadius=m_rcRegion.Width()/2;

if(m_rcRegion.Width()>m_rcRegion.Height())

{

m_nRadius=m_rcRegion.Height()/2;

}

}

voidCClockElement:

:

SetTime(constCTime&tmCur)

{

m_tmCur=tmCur;

}

voidCClockElement:

:

SetColor(COLORREFcrMain,COLORREFcrOther)

{

m_crMain=crMain;

m_crOther=crOther;

}

4、运行效果展示:

5、自我总结:

该小程序是基于MFC中的对话框的,主要针对画笔和画刷的用法,没有涉及连接数据库和算法,完全是为了本学期所学知识的运用,由于时间紧,所以没能深入的探索MFC的奥妙,不过通过本次设计,我对老师课堂上所讲述的关于该类型的知识,有了进一步的了解和掌握,初步的熟悉了画笔和画刷的简单用法,还巩固了MFC类中的基本操作,例如,添加新类,新变量,创建新的对话框,添加控件等方面的知识。

程序设计过程中最大的困难就是对于MFC中的函数了解不够,不能融会贯通的拿来运用,通过XX搜索引擎的查询给自己提供了很大的帮助。

通过此次课程设计使我深刻了解到了日常知识积累的重要性。

同时通过此次课程设计,对于设计可视化窗口的程序有了更好的了解,也激发了自己对可视化窗口程序设计的兴趣。

而且通过这次课程设计,使自己对课本上的东西有了更好的掌握,对课程内容的了解更加深刻,受益匪浅。

通过本次设计我更加懂得了想要熟练掌握编程语言,就需要我们勤于练习。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

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

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