当前位置:文档之家› MFC 时钟

MFC 时钟

WINDOWS程序设计实验一报告
GDI对象使用
设计内容、方法与难点:
本课题设计的内容包括了时钟的显示、定时器的应用。

新建一个对话框,在对话框内进行数据绘制,并设计定时器,在定时器中进行时钟行走的绘图刷新。

点击开始按钮,进行图像绘制;再次点击开始/暂停按钮,绘制暂停
课题难点一:如何对表盘上的,时针、分针、秒针进行处理
解决方案:
抽象出一个指针类,时针、分针、秒针对指针类进行实例化,拥有相同的属性和方法,便于管理
课题难点二:绘制数据,如何在对话框面板上进行图像绘制,文字输出。

解决方案
在MainFrame 类中创建绘图函数,函数的设置一个CDC *pDC参数,图像和文本的显示,在 pDC 进行绘制和显示。

课题难点三:图像刷新时的闪烁问题
解决方案
在响应OnTimer事件时,每次绘图只是进行指针的重绘和时间显示的重绘,表盘和其他控件不进行重新绘制,减少每次绘图的资源
作品特色
本作品的特点是有:
界面美观,在色彩的选择上参考了win7时钟的风格。

二是无闪烁。

设置有开始和停止按钮,可以实时控制时钟的运行。

项目类设计:
(要求有类图和类功能、成员函数和成员变量的文字介绍)
时钟类:
成员变量
CNeedle *m_HourNeedle; //时针
CNeedle *m_MinuteNeedle; //分针
CNeedle *m_SecondNeedle; //秒针
CPen m_CirclePen; //外部圆的画笔
CPen m_KeyPointPen; //关键点的画笔
CPen m_PointPen; //其他点的画笔
成员函数
void DrawCircle(CDC *pDC,int x1,int y1,int x2,int y2);
void Draw(CDC *pDC,int nMoveToX,int nMoveToY,int nDrawX,int nDrawY,CString num); //绘制时钟上面的各个点
void CreatePen(int index,int nPenStyle,int nWidth,COLORREF color); //创建画笔
CPen *GetCirclePen(); //获得圆圈的画笔
CPen *GetKeyPointPen(); //获得关键点的画笔
CPen *GetPointPen(); //获得其他点的画笔
CNeedle *GetHourNeedle(); //获取时针
CNeedle *GetMinuteNeedle(); //获取分针
CNeedle *GetSecondNeedle(); //获取秒针
指针类:
成员变量
CPen m_Pen;
成员函数
void CreatePen(int nPenStyle,int nWidth,COLORREF color);
void Draw(CDC *pDC,int moveToX,int moveToY,int drawX,int drawY); //绘制自己
CPen *GetPen(); //获取画笔
面板类:
成员变量
bool m_Start; //控制菜单项的标识
CClock *m_Clock; //时钟
CTime m_CurrentTime; //当前系统时间
int m_Hour; //当前的时
int m_Minute; //当前的分
int m_Second; //当前的秒
成员函数
void PrintText(CDC *pDc,int quarterWidth,int threeQuartersWidth,int quarterHeight,int threeQuartersHeight,int midWidth,int midHeight);
//输出Title以及时钟的文字
void DrawClock(CDC *pDc,int quarterWidth,int threeQuartersWidth,int quarterHeight,int threeQuartersHeight,int midWidth,int midHeight);
//绘制时钟的图形
void DrawCalendar(CDC *pDc,CRect rect); //绘制日历的所有内容
void Init(); //初始化数据
重点函数简介
(要求函数必须有注释和说明)设置定时器
绘制时钟
绘制当前日历
显示标题、时间
运行结果
程序运行界面如下。

界面显示信息清楚,内容包括:时钟、日历
有待解决的问题
1.无鼠标事件
2.不接受时间的输入。

相关主题