当前位置:文档之家› mfc时钟制作实例

mfc时钟制作实例

试验三 面向对象程序设计实验
——一个简单的可复用时钟控件
A
1
本实验的开发环境
使用C++语言实现 使用VC++6.0集成开发环境开发 使用MFC应用程序开发框架
A
2
MFC版本简介
MFC全称Microsoft Foundation Classes.
1989年微软公司成立Application Framework技术团队, 开发C++面向对象工具给Windows应用程序开发人员 使用。这个小组即AFX小组,就是他们,开始了MFC的 开发历程。
A
3
微软在1993年12月又推出了16为的Visual C++ 1.5, 搭配 的是MFC 2.5。
1994年9月,微软推出Visual C++ 2.0,搭配MFC 3.0。
1995年1月,微软推在增加了MAPI和WinSock支持的基础上, 推出MFC 3.1。
1995年7月,MFC有了3.2版,这是一个小的改版。
A
8
我们可以从CStatic类(静态控件类)派生出类CClockEx来实 现时钟控件类,这样,就可以继承MFC静态控件的很多已经 具备的功能和特点。在建立新类的对话框中,按下图输入。
A
9
按Ctrl+W调出Class Wizard,在class name中选择刚才建立的新类CClockEx,然后 ➢ 重载虚函数PreSubClassWindow,对时钟控件的基本初始化工作将在该函数中进行。 ➢ 添加消息响应WM_PAINT,我们必须用自己完成时钟的绘制工作。 ➢ 添加消息响应WM_SIZE,重载该消息响应以便我们的时钟控件能够自动适应其大小的变化。 ➢ 为了时钟能够走动,我们得定时刷新时钟控件让它走动,还得添加WM_TIMER的消息响应。最终效果如下图所
A
5
应用程序框架设计过程(仅供参考)
打开VC++6.0,新建一个MFC工程,输入工程名,选 择“MFC AppWizard”如图所示,然后点击OK。
A
6
为简单起见,这里选择“Dialog based”程序,然后 可以直接选择finish了。
A
7
在类视图的工程名上右键单击,选择New Class(如 下图所示)来建立一个新类。
void SetTime(const CTime &tmCur);
void SetRegion(LPRECT lprcRect);
示。
A
10
到目前为止,时钟控件的轮廓和已经有了,下面考虑时钟绘 制的具体实ቤተ መጻሕፍቲ ባይዱ。
➢ 一个时钟大致可由时钟背景、时针、分针、秒针四个部分构 成。
➢ 以上的时钟四个部分可是看作四个不同的对象,可以考虑建 立类CClockBackground(背景)CClockHourHand(时针)、 CClockMinHand(分针)、CClockSecHand(秒针)来分别实 现。(此处为了意义明确,类名都比较长)
然后就是1995年9月的32位版MFC 4.0。这个版本有了相当 大的改进。
1996年上半年又有了MFC4.1……
时至今日MFC在Visual C++ 7.0中已经到了7.0版本。
我们常用的Visual C++6.0使用的是MFC 4.2版本。
微软正不断地为“为什么要使用MFC”加上各式各样地强 烈你有,并强烈导引它成为Windows程序设计的C++标准 界面。正如我们所看到的,越来越多的MFC程序出现了并 继续在产生。
微软公司于1992年4月推出C/C++7.0产品时,初次向 世人介绍了MFC 1.0,其32位版本也在1992年7月随着 Win32 SDK推出。
Visual C++1.0(也就是C/C++8.0)搭配MFC 2.0于 1993年3月推出。同年8月推出在Windows NT上的 Visual C++1.1 for Windows NT,搭配的是MFC 2.1。
A
4
试验设计目标
完成一个可重用的C++类,可以通过该类实现一个简 单的模拟时钟
编写一个简单的MFC程序测试验证这个时钟控件类 关于这个时钟控件,如果按照课件继续完善下去,请
将他做得更好更强大。比如说:可以考虑为时钟控件 的各项设置(如颜色)提供外部接口,供CClockEx的 使用者调用,可以考虑丰富背景绘制,加入背景图片 设置,在刻度上标上数字,为指针加上阴影效果,在 时钟上显示日期等。有兴趣的同学有空不妨试试。
A
13
综合刚才这几点,CClockElement的实现的头文件代码如下:
#include <MATH.H>
#define PI 3.1415926535
class CClockElement
{
public:
void SetColor(COLORREF crMain, COLORREF crOther);
➢ 这四个类有它们的共同点,譬如都有自己的绘图函数,如果 要具体能够设置颜色,它们都应该有自己的绘图颜色,同样 应该有颜色设置函数,此外都有绘图区域和区域设置函数等 等。因此,可以为它们的共性建立一个基类,此处命名为 CClockElement(时钟元素)。
A
11
下面逐步实现各个类,首先实现各个组成类的基类—— CClockElement。同样,在ClassView的工程名上面点右 键,选择New Class,在ClassType里面选择Genenric Class,类CClockElement不需要从其它类派生,所以 Base Class可以不填,效果如下图所示。
A
12
下面对类CClockElement的源代码进行编写。 ➢ 因为在后面的绘图中需要用到sin和cos这两个数
学计算公式,因此需包含头文件<MATH.H>以便使 用数学函数库。为后面计算使用,还需定义数学 常量PI(3.1415926535)。 ➢ 时钟的每个组成部分都有绘图区域区域,因此, 可在基类中定义绘图区域变量。同理,可以定义 颜色变量,为了是颜色不显得单调,这里为每个 控件设置两种颜色(如果想使程序更加绚丽,可 以设置更多颜色)。 ➢ 对应的,这些变量需增加接口函数来进行访问。 ➢ 对于每个组成部分都应该有的Draw函数,当然也 需在基类中定义,但是,该函数对于基类来说是 无需函数实现的,因此可定义为纯虚函数。
相关主题