mfc时钟制作实例

合集下载

Visual_C++基于对话框的MFC应用程序【简单时钟】

Visual_C++基于对话框的MFC应用程序【简单时钟】

1.1创建对话框的应用程序1.使用AppWizard创建应用程序框架首先,创建一个对话框应用程序,其工程文件名为:ch1.dsp。

具体步骤如下:(1)启动Visual C++6.0,在File菜单中选择new菜单项;(2)在new对话框的Project页中选择MFC AppWizard(exe)选项,在Project name框中输入:ch1,并在Location框中指定希望的目录路径,编译系统生成的各种文件将会存放在该目录下,然后点击[OK]按钮(3)MFC AppWizard-Step1中选择Dialog based选项,MFC AppWizard-Step2到MFC AppWizard-Step4中取默认选项;(4)进入VC对话框设计界面后,选中[TODO:在这里设置对话控制。

]静态框并按del键删除该框,选中[取消]按钮并按del键删除该按钮;(5)将[确认]按钮拖曳到对话框的下方中间。

生成的对话框设计窗口(如图1-1所示)。

图1-12.向类中添加系统消息响应函数Windows应用程序的采用事件触发、消息驱动机制和大量的消息响应函数构成了应用程序的主体。

本示例需要用到两个消息响应函数OnCtlColor()和OnTimer(),前者响应窗口消息:WM_CTLCOLOR,后者响应窗口消息:WM_TIMER。

关于这两个函数的功能和用法暂且略过,留待后面小节再叙。

这里先介绍响应函数加载的方法。

在CCh1Dlg类中添加OnCtlColor()函数的操作方法如下:(1)打开类向导(MFC ClassWizard)窗口,选择Message Maps 页;(2)选择工程、类和对象标识。

在Message Maps页的Project、Class name、Object Ids框中分别选择:ch1、CCh1Dlg、CCh1Dlg;(3)添加响应函数。

在Message Maps页的Messages框中选中并双击窗口消息:WM_CTLCOLOR,此时,消息WM_CTLCOLOR 的响应函数OnCtlColor()被添加到类向导底部Member Functions框中。

计算机图形学 MFC VC++6.0制作的简单时钟源代码

计算机图形学 MFC VC++6.0制作的简单时钟源代码
{
// TODO: Add your command handler code here
Timer=1;
SetTimer(1,100,NULL);
}
void CMFCFrame1View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
{
// dቤተ መጻሕፍቲ ባይዱfault preparation
return DoPreparePrinting(pInfo);
}
void CMFCFrame1View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
// CMFCFrame1View drawing
/////////////////////////////////////////////////////////////////////////////
// CMFCFrame1View printing
BOOL CMFCFrame1View::OnPreparePrinting(CPrintInfo* pInfo)
// CMFCFrame1View
IMPLEMENT_DYNCREATE(CMFCFrame1View, CView)
BEGIN_MESSAGE_MAP(CMFCFrame1View, CView)
//{{AFX_MSG_MAP(CMFCFrame1View)
ON_WM_CREATE()

MFC时钟日历设计

MFC时钟日历设计

mfc课程设计报告课程名称:计算机程序设计实训题目:MFC时钟日历设计说明:1、报告中的第一、二、三项由学生在课程设计开始前填写,由指导教师指导并确认签字。

2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩,并填写成绩评定表。

3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。

答辩小组成员应由2人及以上教师组成。

答辩后学生根据答辩情况填写答辩记录表。

4、报告正文字数一般应不少于3000字,也可由指导教师根据本门课程设计的情况另行规定。

5、平时表现成绩低于6分的学生,取消答辩资格,其该课程设计成绩按不及格处理。

6、课程设计完成后,由指导教师根据完成情况写出总结。

7、此表格式为徐州师范大学物理与电子工程学院提供的基本格式,指导教师可根据本门课程设计的特点及内容做适当的调整。

指导教师签字:年月日目录摘要 (II)Abstract (II)目录I1 课题背景 (1)1.1 背景、目的、意义、解决的主要问题及应达到的技术要求 (1)2 设计方案简述 (2)2.1 设计方案论证 (2)2.1.1设计流程图 (2)2.1.2 主要模块 (2)3 详细设计 (3)3.1 时钟的设计 (3)3.1.1 时钟组件的绘制 (3)3.2 日历的设计 (3)3.2.1 添加日历对话框 (3)3.2.2 日期的显示 (5)4 设计结果及分析 (8)4.1 设计结果 (8)4.1.1 时钟界面的实现结果 (8)4.1.2 日历的实现结果 (9)5 总结105.1问题与调试 (10)5.2 实验感想 (10)参考文献11附录主要程序代码 (12)摘要VisuslC++6.0提供了功能强大的MFC类库(MierosoftFoundationClass),MFC是一个很大的C++类层次结构。

其中封装了大量的类及其函数,很多Windows程序所共有的标准内容可以由MFC的类来提供,MFC类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数量,使编程工作变得更加轻松容易。

C#实例——钟表模拟

C#实例——钟表模拟

目录摘要: (1)1.C#语言简介 (2)2.实现目标 (2)3.主要方法 (3)4.实验过程中的难点 (3)5.实验过程 (4)6.总结 (6)附录(源程序): (7)用C#实现时钟模拟用C#实现时钟模拟摘要:我们日常生活中有各种各样的时钟。

随着计算机的普及和计算机科学的飞速发展人们开始越来越多的利用计算机解决实际问题,开发一个易于查看的时钟有较大的现实意义。

VisualStudiio 2008是面向Windows Vista、Office 2007、Web 2.0的下一代开发工具,其强大的兼容性以及高速处理能力帮助程序人员轻松应对研究、测试、开发过程中的各种问题。

对于Web,ASP NET AJAX 及其他新技术使开发人员能够迅速创建更高效、交互式更强和更个性化的新一代Web 体验。

本文基于VisualStudiio 2008采用C#语言,应用GDI+应用程序编程借口(API)实现时钟模拟。

关键词:C#开发时钟模拟GDI+ VisualStudio20081.C#语言简介C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。

它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。

C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

C#旨在设计成为一种“简单、现代、通用”,以及面向对象的程序设计语言,此种语言的实现,应提供对于以下软件工程要素的支持:强类型检查、数组维度检查、未初始化的变量引用检测、自动垃圾收集(Garbage Collection,指一种自动内存释放技术)。

软件必须做到强大、持久,并具有较强的编程生产力。

此种语言为在分布式环境中的开发提供适用的组件开发应用。

为使程序员容易迁移到这种语言,源代码的可移植性十分重要,尤其是对于那些已熟悉C和C++的程序员而言。

VC计算器-小闹钟-通讯录设计(含源文件)

VC计算器-小闹钟-通讯录设计(含源文件)

面向对象Windows程序设计选题:计算器、小闹钟、通讯录学号:姓名:院(系):信息工程学院专业:信息完成日期:指导老师:老师题目一:利用MFC框架编写简易计算器一.需求分析即要实现简单计算器的功能,包括加、减、乘、除等运算功能,还要实现数据的输入、输出、计算、显示及程序退出等功能。

二.总体设计1.程序的创建.使用软件Visual C++ 6.0.,首先,新建一个MFC 基于对话框的工程。

点击文件-新建,在工程选项卡里选择MFC AppWizard[exe],给工程命名Jisuan。

点击确定。

创建一个基于对话框的应用程序。

2.界面的设计按如图所示向对话框添加控件,且按如图所示一样排版。

4.为控件添加成员变量和消息处理函数为IDC_FIRNUM 增加一个变量,点Add Variable…,我们为它增加一个 float 型的变量,命名为m_Firnum。

给第二个编辑框增加float变量m_Secnum。

第三个编辑框增加float变量m_Result。

按ctrl+w选择第一个选项卡 Message Maps,从IDs 中选择IDC_JIA,即加这个按钮,从 Messages 中选择 BN_CLICKED,即当被单击的时候,然后点 AddFunction…为其添加函数然后弹出对话框,为函数命名,选择默认即可,点击OK。

同样为-,*,/添加一样的响应函数。

结果如图:三、编程说明与实现添加如下代码:void CJisuanDlg::OnJia(){// TODO: Add your control notification handler code hereUpdateData(true);m_Result=m_Firnum+m_Secnum;UpdateData(false);}void CJisuanDlg::OnJian(){// TODO: Add your control notification handler code hereUpdateData(true);m_Result=m_Firnum-m_Secnum;UpdateData(false);}void CJisuanDlg::OnCheng(){// TODO: Add your control notification handler code hereUpdateData(true);m_Result=m_Firnum*m_Secnum;UpdateData(false);}void CJisuanDlg::OnChu(){// TODO: Add your control notification handler code hereUpdateData(true);m_Result=m_Firnum/m_Secnum;UpdateData(false);}这里有一个UpdateData(Bool)函数。

MFC之模拟时钟

MFC之模拟时钟

MFC之模拟时钟最近在学习MFC,程序设计⽼师布置”画板“和”模拟时钟“作为实验来实践,由于没去上课,⽹上搜索的很多教程⼏乎都是以VC6.0为基础的,⽽⾝边⼏乎都是VS2008以上,对于初学者来说,有时仿照VC6.0的教程在VS2008或更⾼的环境上难免会出现⼀些困难,特此将模拟时钟程序在VS2008环境下的开发过程总结如下:1.新建项⽬项⽬类型选择“MFC”,模板选择“MFC应⽤程序”,名称⾃拟,这⾥命名为”Clock"。

选择好以后效果如下:2.MFC应⽤程序向导设置选择“下⼀步"这⾥有两个更改,⼀是”应⽤程序类型”选择“基于对话框”,同时取消选中“使⽤Unicode库”。

完成以上两步之后,直接单击“完成”即可。

三、核⼼部分1.⾸先打开“类视图”,选择"CClockDlg"在该类的头⽂件中,找到如下代码:紧接着后⾯添加三个变量⽤于临时保存时间的秒、分、时。

int m_Sec, m_Min, m_Hour;插⼊后的效果如下:2.⼿动添加⼀个消息映射函数,完成时间的获取和指针的绘制。

在CClockDlg类的头⽂件中找到如下代码:在其中增加⼀⾏如下:afx_msg void OnTimer(UINT nIDEvent);增加后显⽰效果如下:接着在资源管理器中找到CClockDlg类的cpp⽂件来实现刚才的函数声明需要添加的代码如下:1void CClockDlg::OnTimer(UINT nIDEvent)2 {3// TODO: Add your message handler code here and/or call default4 CTime time = CTime::GetCurrentTime(); //获得系统时间5 m_Sec = time.GetSecond();6 m_Min = time.GetMinute();7 m_Hour = time.GetHour();89 CDC* pDC = GetDC();10 CRect rect;11 GetClientRect(&rect); //获取客户区域12 CBitmap bitmap; //定义图⽚类13 bitmap.LoadBitmap(IDB_BITMAP1); //加载位图14 CDC memdc; //定义临时画布15 memdc.CreateCompatibleDC(pDC); //创建画布16 memdc.SelectObject(&bitmap); //关联图⽚1718int x = rect.Width()/2;19int y = rect.Height()/2;2021 CPen MinutePen(PS_SOLID,2,RGB(0,0,0)); //设置分针画笔22 memdc.SelectObject(&MinutePen);23 memdc.MoveTo(x,y);24//绘制分针25 memdc.LineTo(x+(long)40*cos(PI/2-2*PI*m_Min/60.0),y-(long)40*sin(PI/2-2*PI*m_Min/60.0));26 CPen HourPen(PS_SOLID,3,RGB(0,0,0)); //设置时针画笔27 memdc.SelectObject(&HourPen);28 memdc.MoveTo(x,y);29//绘制时针30 memdc.LineTo(x+(long)30*cos(PI/2-2*PI*(5*m_Hour/60.0+m_Min/12.0/60.0))31 ,y-(long)30*sin(PI/2-2*PI*(5*m_Hour/60.0+m_Min/12.0/60.0)));32 CPen SecondPen(PS_SOLID,1,RGB(255,0,0)); //设置秒针画笔33 memdc.SelectObject(&SecondPen);34 memdc.MoveTo(x,y);35 memdc.LineTo(x+(long)50*cos(PI/2-2*PI*m_Sec/60.0),y-(long)50*sin(PI/2-2*PI*m_Sec/60.0));//绘制秒针36 memdc.MoveTo(x,y);37 memdc.LineTo(x+(long)10*cos(PI/2-2*PI*(m_Sec+30)/60.0),y-(long)10*sin(PI/2-2*PI*(m_Sec+30)/60.0));//绘制秒针38 SecondPen.DeleteObject();39 MinutePen.DeleteObject();40 HourPen.DeleteObject();41 pDC->BitBlt(0,0,rect.right,rect.bottom,&memdc,0,0,SRCCOPY); //复制图⽚42 memdc.DeleteDC(); //复制临时画布到预览窗⼝43 bitmap.DeleteObject(); //删除图⽚44 ReleaseDC(pDC);45 CDialog::OnTimer(nIDEvent);46 }3.设置时钟位图打开“资源视图”在“资源视图”中添加资源资源类型选择“Bitmap",然后选择”导⼊”,把实现准备好的BMP⽂件导⼊。

基于MFC的大屏幕数字时钟审批稿

基于MFC的大屏幕数字时钟审批稿

基于M F C的大屏幕数字时钟YKK standardization office【 YKK5AB- YKK08- YKK2C- YKK18】大屏幕显示数字时钟设计姓名:谭X 指导教师:XXX专业:XXXXXXXXX 年级:20XX级摘要本设计基于MFC,M FC是提供的一条类库,是一种应用程序框架,随微软Visual C++开发工具发布,以C++类的形式封装了Windows的API,并且包含一个框架,以减少人员的工作量。

其中包含的类包含大量Windows句柄封装类和很多Windows的内建和组件的封装类。

MFC:微软基础类(Microsoft Foundation Classes),同VCL类似,是一种应用程序框架,随微软Visual C++开发工具发布。

目前最新版本为,并且发布了中文版。

该类库提供一组通用的可重用的类库供开发人员使用,大部分类均从CObject 直接或间接派生,只有少部分类例外。

MFC应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类(应用程序对象)组成。

MFC 提供了MFC 自动生成框架。

Windows 应用程序中,MFC 的主包含文件为。

此外MFC的部分类为MFC/ 通用,可以在Win32 应用程序中单独包含并使用这些类。

由于它的易用性,初学者常误认为开发必须使用MFC,这种想法是错误的。

作为Application Framework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计。

关键字:MFC;大屏显示幕数字时钟;C++。

Large screen display digital clock designName:Chen Tan Tutor:Jijie BiMajor:Electronics and Communications Engineering Grade: 2013AbstractThis design is based on the MFC, MFC is Microsoft provides aclass library,is a kind of application framework,along with the Microsoft Visual c++development tools, in the form of c++class encapsulates the Windows API, and contains an application framework, in order to reduce the workload application to the class contains a large number of Windows which contains wrapper class and many Windows built-in controls and component wrapper class.MFC: Microsoft Foundation Classes (Microsoft Foundation Classes), with the VCL, is a kind of application framework, along with the Microsoft Visual c++development the latest version is , and release the Chinese class library provides a set of generic reusable class library for developers, most of the classification are directly or indirectly derived from CObject, only a few exceptions.The overall structure of the MFC applications usually derived by the developer from MFC class several classes and class a CWinApp object (the application object).MFC provides a MFC AppWizard framework automatically generated.Windows application, MFC master include file for .Also part of the MFC class for MFC/ATL general, can separate in the Win32 application contains and use these classes.Because of its ease of use, often mistaken for beginners vc++ evelopment must use MFC, this idea is an Application Framework, the use of MFC can only improve the efficiency of the development of some cases, only play a supplementary role, and does not replace the Win32 programming.Key words:MFC;Screen display digital clock;C++.第1章绪论MFC简介M FC(Microsoft Foundation Classes),是提供的一条类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个框架,以减少人员的工作量。

MFC 模拟时钟

MFC    模拟时钟

模拟时钟以实例为背景学习基于MFC的WINDOWS应用程序设计,编写一个模拟时钟程序,此程序在屏幕上有一个指针式钟面,用菜单选项进行时间控制。

时间必与机器系统时间相同,不可任意设置。

1 编程要求(1)为该程序设计绘制合适的时钟外形。

(2)程序界面设计合理,色彩得体大方,显示正确。

(3)时针、分针和秒针形象美观,即使各指针重合也可辨认。

(4)各指针运动规律正确,以便于演示。

(5)时间显示正确,并且显示当前系统时间。

(6)按下设置菜单项可实现时间的调整与重新显示2 问题分析本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、菜单命令、画笔/画刷等。

指针运动算法和屏幕重绘方法是本程序主要难点所在。

不论何种指针,每次转动均以π/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。

计算指针端点(x, y)的公式如下:x =圆心x坐标+ 指针长度* cos (指针方向角)y =圆心y坐标+ 指针长度* sin (指针方向角)注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点。

三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。

若用三个定时器消息分别处理时针、分针和秒针的运动,就会使问题复杂化且不易实现三个指针联动的正确规律。

采用一个定时器消息可以很容易实现指针联动算法。

3 实现步骤(1)用AppWizard生成一个名为“模拟时钟”的单文档(SDI)程序框架。

为了简化应用程序,在第四步时去掉Docking toolbar和Initial status bar选择项,其他各选项均可用缺省设置。

(2)编辑项目的菜单资源,在主框架窗口的主菜单(IDR_MAINFRAME)中添加一个名为“时钟控制”的下拉菜单。

在“时钟控制”菜单中添加二个菜单选项“启动时钟”、“停止时钟”并在菜单属性项中设定“启动时钟”菜单的ID 标号为ID_START,“停止时钟”菜单的ID标号为ID_STOP,“为了简化菜单,可删除系统原有的“编辑”、“关于”等菜单项。

基于MFC的大屏幕数字时钟

基于MFC的大屏幕数字时钟

大屏幕显示数字时钟设计姓名:谭X 指导教师:XXX专业:XXXXXXXXX 年级:20XX级摘要本设计基于MFC,M FC是微软公司提供的一条类库,是一种应用程序框架,随微软Visual C++开发工具发布,以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。

其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

MFC:微软基础类(Microsoft Foundation Classes),同VCL类似,是一种应用程序框架,随微软Visual C++开发工具发布。

目前最新版本为10.0,并且发布了中文版。

该类库提供一组通用的可重用的类库供开发人员使用,大部分类均从CObject 直接或间接派生,只有少部分类例外。

MFC应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。

MFC 提供了MFC AppWizard 自动生成框架。

Windows 应用程序中,MFC 的主包含文件为Afxwin.h。

此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。

由于它的易用性,初学者常误认为VC++开发必须使用MFC,这种想法是错误的。

作为Application Framework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计。

关键字:MFC;大屏显示幕数字时钟;C++。

Large screen display digital clock designName:Chen Tan Tutor:Jijie BiMajor:Electronics and Communications Engineering Grade: 2013AbstractThis design is based on the MFC, MFC is Microsoft provides a class library,is a kind of application framework,along with the Microsoft Visual c++development tools, in the form of c++class encapsulates the Windows API, and contains an application framework, in order to reduce the workload application developers.Handle to the class contains a large number of Windows which contains wrapper class and many Windows built-in controls and component wrapper class.MFC: Microsoft Foundation Classes (Microsoft Foundation Classes), with the VCL, is a kind of application framework, along with the Microsoft Visual c++development tools.Currently the latest version is 10.0, and release the Chinese version.The class library provides a set of generic reusable class library for developers, most of the classification are directly or indirectly derived from CObject, only a few exceptions.The overall structure of the MFC applications usually derived by the developer from MFC class several classes and class a CWinApp object (the application object).MFC provides a MFC AppWizard framework automatically generated.Windows application, MFC master include file for Afxwin.H.Also part of the MFC class for MFC/ATL general, can separate in the Win32 application contains and use these classes.Because of its ease of use, often mistaken for beginners vc++ evelopment must use MFC, this idea is wrong.As an Application Framework, the use of MFC can only improve the efficiency of the development of some cases, only play a supplementary role, and does not replace the Win32 programming.Key words:MFC;Screen display digital clock;C++.第1章绪论1.1 MFC简介M FC(Microsoft Foundation Classes),是微软公是微软公司提供的一条类库司提供的一条类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。

MFC 提供了两个 日期 和 时间 类CTime和CTimeSpan

MFC 提供了两个 日期 和 时间 类CTime和CTimeSpan
以使用mktime()函数将用tm结构表示的时间转化为日历时间。其函数原型如下:
time_t mktime(struct tm * timeptr);
其返回值就是转化后的日历时间。这样我们就可以先制定一个分解时间,然后对这个时间进行操作了,
下面的例子可以计算出1997年7月1日是星期几:
#include "time.h"
二、总结
首先看几个函数的原型的声明(在time.h中):
clock_t clock( void ) clock_t是用来保存时间的数据类型,是long型
double difftime(time_t time1, time_t time0);取时间间隔的函数
time_t time(time_t * timer);日历时间函数
中,这样的程序虽然可以编译通过,但运行时会异常终止。
5.还知道了一个system()函数,是执行DOS命令的,system("某DOS命令");头文件是stdlib.h?windows.h
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
struct tm t;
time_t t_of_day;
t.tm_year=1997-1900;
t.tm_mon=6;
t.tm_mday=1;
t.tm_hour=0;
t.tm_min=0;
t.tm_sec=1;
int tm_min; /*分-取值区间为[0,59] */
int tm_hour; /*时-取值区间为[0,23] */
int tm_mday; /*一个月中的日期-取值区间为[1,31] */

多功能数字钟的设计及制作

多功能数字钟的设计及制作

多功能数字钟的设计及制作1.设计分析本次设计的数字钟具有校时功能。

我们需要在先设计一个基本的数字钟,然后在此基础上增加校时电路。

一个基本的数字钟由三个部分组成:秒脉冲产生电路,计数电路,译码显示电路,然后就是加上校时电路,一个四部分构成了本次设计的多功能数字钟,其总体方框图如图1-1图1-1 总体方框图2.设计内容2.1秒脉冲产生部分本设计使用由555定时器构成的多谐振荡器来产生1HZ的信号。

虽然此振荡器没有石英晶体稳定度和精确度高,由于设计简单而成为了设计时的首选。

只要在555定时器电路外部配上两个电阻及两个电容元件,并将某些引脚相连,就可以方便地构成多谐振荡器。

555定时器是数字脉冲产生的核心芯片,所以在了解其原理之前,我们需了解555定时器。

555定时器逻辑符号如图2-1所示:图2-1 555定时器逻辑符号管脚功能如表2-1所示:图2-2 秒脉冲电路根据原理和元件图,结合一阶电路暂态过程的三要素法,可以计算出充放电的时间,两者相加即为脉冲周期,脉冲周期的倒数即为脉冲频率。

充电过程的方程式: 2/3Vcc=Vcc+(1/3Vcc-Vcc)e(t1/RC)t1=(R1+R2)C*㏑2=0.7(R1+R2)C放电过程的方程式: 1/3Vcc=0+(2/3Vcc-0)e(t1/RC)t2=R2*C㏑2=0.7R2*C脉冲周期为: t=t1+t2=0.7(R1+2R2)C脉冲频率为: f=1/t=1.43/(R1+2R2)C令R1=15k,R2=68k,C=0. 01F,(其中0.01F的电容的作用是防干扰的)代入数据,计算得,f=0.94HZ≈1HZ基本满足实验要求。

2.2计数部分计数部分的核心芯片是74LS9074LS90是二---五---十进制异步计数器。

它有两个时钟输入CKA和CKB,其中,CPA和Q0组成一位二进制计数器,CKB和Q1Q2Q3组成五进制计数器,若将Q0与CKB相连接,时钟脉冲从CKA输入,则构成了84212BCD码十进制计数器。

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

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

VC++课程设计--基于MFC的模拟时钟计科2011级VC++课程设计实验报告题目:基于MFC的模拟时钟班级:计科1104班学号:1108030429姓名:张宝龙日期:2014/1/7课程设计实验报告1、题目:基于MFC的模拟时钟2、编程要点:制作时钟的过程中,首先给时钟创建一个基类CClockElement,还需要派生类CClockBackground,CClockHourHand,CClockMin Hand,CClockSecHand分别控制时钟的背景,时钟的时针,分针,秒针。

3、实现过程:(1)工程、风格、控件与变量表本时钟是基本对话框的时钟,界面简约,便于使用。

控件控件名控件类型Clock 静态文本变量表变量名类型m_crMain COLORREF m_crOther COLORREFm_tmCur CTimem_rcRegion CRectm_nRadius intm_clockBK CClockBackground m_clockHour CClockHourHandm_clockMin CClockMinHandm_clockSec CClockSecHandm_rcClient CRectm_Clock CClockEX(2)主要功能程序代码CClockBackground::CClockBackground() {//为时钟背景定义默认的颜色设置m_crMain=RGB(0,0,255);m_crOther=RGB(0,255,0);}void CClockBackground::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();int nRadius=m_nRadius-8;for(int i=0;i<60;i++){CPoint ptEnd=ptCenter;ptEnd.Offset((int)(nRadius*sin(2*PI*(i% 60)/60)),(int)(-nRadius*cos(2*PI*(i%60)/60)));CRect rcDot(-2,-2,2,2);rcDot.OffsetRect(ptEnd);pDC->Ellipse(rcDot);}//绘制12个小方框,表示12个正点pDC->SelectObject(&penMain);pOldBrush=pDC->SelectObject(&brOth er);for(i=0;i<12;i++){CPoint ptEnd=ptCenter;double fRadian=2*PI*(i%12)/12;ptEnd.Offset((int)(nRadius*sin(fRadian) ),(int)(-nRadius*cos(fRadian)));CRect rcDot(-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);}void CClockHourHand::Draw(CDC *pDC){//设置准备环境CPenpenMain(PS_SOLID,1,m_crMain),penOthe r(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;//确定绘制菱形指针所需的四个角的坐标CPoint ptDiamond[4];for(int i=0;i<4;i++){ptDiamond[i]=m_rcRegion.CenterPoin t();}int nRadius=m_nRadius/2;ptDiamond[0].Offset((int)(nRad ius*sin(fRadian)),(int)(-nRadius*cos (fRadian)));fRadian+=0.5*PI;nRadius=m_nRadius/20;ptDiamond[1].Offset((int)(nRad ius*sin(fRadian)),(int)(-nRadius*cos (fRadian)));fRadian+=0.5*PI;nRadius=m_nRadius/10;ptDiamond[2].Offset((int)(nRad ius*sin(fRadian)),(int)(-nRadius*cos (fRadian)));fRadian+=0.5*PI;nRadius=m_nRadius/20;ptDiamond[3].Offset((int)(nRad ius*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);}void CClockMinHand::Draw(CDC *pDC){//设置准备环境CPenpenMain(PS_SOLID,1,m_crMain),penOthe r(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();double fRadian=2*PI*nTime/3600;//确定绘制菱形指针所需的四个角的坐标CPoint ptDiamond[4];for(int i=0;i<4;i++){ptDiamond[i]=m_rcRegion.CenterPoin t();}int nRadius=m_nRadius/4;ptDiamond[0].Offset((int)(nRad ius*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)(nRad ius*sin(fRadian)),(int)(-nRadius*cos (fRadian)));fRadian+=0.5*PI;nRadius=m_nRadius/20;ptDiamond[3].Offset((int)(nRad ius*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);}void CClockSecHand::Draw(CDC *pDC){int nTime=m_tmCur.GetSecond();CPointptStart=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)));CPenpenMain(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_rcClie nt);m_clockMin.SetRegion(m_rcClien t);m_clockSec.SetRegion(m_rcClien t);}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.Heigh t());dcMem.SelectObject(&bmp);DrawClock(&dcMem); //绘制时钟dc.BitBlt(0,0,m_rcClient.Width (),m_rcClient.Height(),&dcMem,0,0,SR CCOPY);}voidCClockEX::PreSubclassWindow(){GetClientRect(m_rcClient);//获取当前客户区m_clockBK.SetRegion(m_rcClient );m_clockHour.SetRegion(m_rcClie nt);m_clockMin.SetRegion(m_rcClien t);m_clockSec.SetRegion(m_rcClien t);SetTimer(1,100,NULL);CStatic::PreSubclassWindow();}void CClockEX::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(LPRECT lprcRect){m_rcRegion=lprcRect;m_nRadius=m_rcRegion.Width()/2;if(m_rcRegion.Width()>m_rcRegion.Hei ght()){m_nRadius=m_rcRegion.Height()/2;}}void CClockElement::SetTime(const CTime &tmCur){m_tmCur=tmCur;}voidCClockElement::SetColor(COLORREF crMain,COLORREF crOther){m_crMain=crMain;m_crOther=crOther;}4、运行效果展示:5、自我总结:该小程序是基于MFC中的对话框的,主要针对画笔和画刷的用法,没有涉及连接数据库和算法,完全是为了本学期所学知识的运用,由于时间紧,所以没能深入的探索MFC的奥妙,不过通过本次设计,我对老师课堂上所讲述的关于该类型的知识,有了进一步的了解和掌握,初步的熟悉了画笔和画刷的简单用法,还巩固了MFC类中的基本操作,例如,添加新类,新变量,创建新的对话框,添加控件等方面的知识。

用C++编写模拟时钟程序

用C++编写模拟时钟程序

模拟时钟程序1 基本功能描述本次课程设计是基于面向对象的应用程序设计,主要运用C++语言在VC++开发环境下的MFC中编程实现。

模拟时钟的基本功能是程序初始在屏幕上有一指针式时钟表盘,表盘为椭圆形,内部分布有12个刻度,表盘上有三个长度和颜色不同的时针分针和秒针,相互之间容易辨认,指针的运动通过数学推导之后以代码实现。

表盘的下方是一个数字形式显示的数字钟,其显示时间的格式是时:分:秒,指针式时钟和数字式时钟显示的时间同步,且两个时钟所显示的时间与系统时间相致,页面的菜单项设有时间设置项,可以对所显示的时间进行调整,能进行调整的具体内容是年、月、日、时、分、秒。

设计成功之后,此应用程序便可以起到时钟显示的作用。

2 设计思路2.1 程序流程图图1 模拟时钟程序流程图2.2 程序流程分析(1) 绘制指针式的时钟和数字式的时钟图形时,要在CView类下进行。

其中OnDraw()函数在绘制视图窗口时被调用,在定义了画刷CBrush和画笔CPen之后,调用GetClientRect()定义屏幕大小并确定椭圆中心的坐标,然后调用Ellipse绘制椭圆,即指针式的时钟表盘,SetTextColor绘制文本颜色,调用MoveTo和LineTo绘制表盘指针,同时调用CreateFont()创建数字钟字体,TextOut则是用以数字钟的文本输出。

(2) 模拟时钟处理消息的过程:首先调用SetTimer函数定义时钟消息,包括参数指定计时器的ID,消息产生的时间间隔,回调函数为NULL;调用消息处理函数OnTimer()刷新窗口显示。

在相应的WM_TIMER消息处理里添加时钟消息响应代码;最后调用KillTimer 释放该时钟。

(3) 要实现时钟的动态效果,即时间窗显示的时间每隔一秒钟更新一次,需要在时间窗格的正文调用CStatusBar::SetPaneText()函数。

要定时更新,则应利用WM_TIMER消息,计时器每隔一定的时间间隔就会发出一个WM_TIMER消息,而这个时间间隔可由用户指定。

C++电子闹钟设计说明书

C++电子闹钟设计说明书

电子闹钟设计说明书一、实现的功能一个简单的电子闹钟设计程序,和一般的闹钟的功能差不多。

首先此程序能够同步电脑上的显示时间,保证时间的准确性;24小时制,可以根据自己喜欢的铃声设置闹钟提示音,还能自己设置提示语句,如“时间到了该起床了”,“大懒虫,天亮了,该起床了”等等,所以这是一个集实用和趣味于一体的小程序。

二、设计步骤1、打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名张卢锐的闹钟及其所在位置,点击确定,如图所示。

2、将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成,如图所示。

然后一直点下一步,最后点完成,就建立了一个基于对话窗口的程序框架,如图所示。

3、下面是计算器的界面设计在控件的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。

在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,以显示小时的窗口为例,如图所示,在该对话框中输入ID属性。

在控件的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。

在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,以数字按钮打开为例,如图所示,在该对话框中输入控件的ID值和标题属性。

按照上面的操作过程编辑其他按钮对象的属性。

表1 各按钮和编辑框等对象的属性完成后界面如图所示。

4、连接变量和代码1)、给编辑框连接变量。

在编辑框上单击鼠标右键,在弹出菜单中选择ClassWizard菜单项,弹出MFC ClassWizard 对话框,选择Member Variables选项卡,如图所示。

2)、给按钮连接代码(以打开按键为例)给打开按钮连接代码。

在打开按钮上单击鼠标右键,选择ClassWizard菜单项,在弹出的对话框中选择Messages Maps选项卡,然后在Object IDs列表框中选择IDC_HOUR,在Messages列表框中选择BN_CLICKED项,即选择单击按钮事件,如图所示。

模拟时钟程序

模拟时钟程序

目录1.基本功能描述 (1)2.设计思路 (1)3.软件设计 (3)3.1 设计步骤 (3)3.2 界面设计 (4)3.3 关键代码的实现 (8)3.3.1 构造函数功能实现原理 (8)3.3.2 确定指针位置实现原理 (8)3.3.3 OnDraw()函数实现原理 (9)3.3.4 OnTimer()函数的实现原理 (9)3.3.5 其它功能的实现原理 (9)4.结论与心得体会 (10)5.参考文献 (10)6.思考题 (11)7.附录 (11)7.1 调试报告 (11)7.2 测试结果 (13)7.3 关键源代码 (13)模拟时钟程序1.基本功能描述模拟时钟程序为指针式时钟,在时钟的上方用数字形式显示日期,时钟下方用数字形式显示数字时钟。

数字时钟与指针时钟显示一致,并且与系统时间保持一致。

另外,在菜单栏上添加控制按钮,分别实现时钟的暂停、启动、时间调整、恢复系统时间等功能。

同时,添加工具栏,以便快捷实现上述操作功能。

当暂停按钮按下时,指针停止走动,数字时钟停止显示;当启动按钮按下时,指针重新开始走动,数字时钟开始显示;当恢复系统时间按钮被按下时,指针时钟和系统时间重新保持一致;当时间调整按钮被按下时,弹出对话框,对时间进行设置,按下确定按钮后,指针时间显示与设置时间一致并开始转动。

2.设计思路程序开始启动后,计时器启动,每次间断一秒自动调用OnTimer()函数,OnTimer()函数包含了各个时钟的计时规则,即秒、分、时、日、月、年等计时规则。

此后进行刷新重绘操作,即调用OnDraw()函数,对指针和数字时钟进行重绘。

程序产生消息循环,当收到暂停消息时,关闭计时器,停止计时;当收到启动消息时,启动计时器,重新开始计时;当接收到恢复系统时间消息时,调用系统时间,并初始化各时间变量开始计时;当接收到调整时间消息时,构建对象,并获取对象中各时间变量的值,并开始计时。

在指着重绘时,需要知道其位置,通过调用SetClock()函数实现。

用VC++制作-模拟时钟应用程序

用VC++制作-模拟时钟应用程序

案例五模拟时钟应用程序以实例为背景学习基于MFC的WINDOWS应用程序设计,编写一个模拟时钟程序,此程序在屏幕左边有一个指针式钟面,右方有两个矩形框,上面以数字方式显示日期和时间,该时间应与指针显示的时间一致,下方的矩形框作为秒表。

用菜单选项或按钮设置时间和秒表。

时间不必与机器系统时间相同,可任意设置。

模拟时钟示意图1 编程要求(1)为该程序设计一个美观大方的图标。

(2)程序界面设计合理,色彩得体大方,显示正确。

(3)时针、分针和秒针形象美观,即使各指针重合也可辨认。

(4)各指针运动规律正确。

为便于演示,时钟速度应比实际时间快20倍,即1小时相当于3分钟。

(5)数字式时钟的时间显示与指针式时钟显示一致。

(6)按下设置时间按钮或菜单项可弹出一对话框,用于设置当前的时间和日期。

(7)按下秒表控制按钮后,秒表显示窗中显示从0开始的时间,单位为百分之一秒。

再次按下秒表控制按钮后计时停止,该窗口显示累计时间。

2 问题分析本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、定时器消息、鼠标消息、菜单命令、对话框、画笔/画刷、显示文字等。

指针运动算法和屏幕重绘方法是本程序主要难点所在。

不论何种指针,每次转动均以π/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。

计算指针端点(x, y)的公式如下:x =圆心x坐标+ 指针长度* cos (指针方向角)y =圆心y坐标+ 指针长度* sin (指针方向角)注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点。

三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。

若用三个定时器消息分别处理时针、分针和秒针的运动,就会使问题复杂化且不易实现三个指针联动的正确规律。

采用一个定时器消息可以很容易实现指针联动算法。

由于屏幕的重绘速度很快(50 ms一次),如果采用全屏删除式重绘则闪烁十分明显,显示效果不佳。

MFC实现简单的小闹钟

MFC实现简单的小闹钟
2
主界面如下
3
“倒计时器”标签下的控件与“定时器”标签下的控件大致相同。 点击“Browse…”会弹出如下界面(请使用CfileDialog):
4
选择一个文件后,文件路径出现在“Browse…”左边的编辑框 里,也可以直接在该编辑框中手动输入音乐文件的路径。主界 面中的“Set Timer:”下的编辑框是一个CDataTimeCtrl控件,
❖ 取得用户设定的秒数 second。
❖ 每隔一秒钟发送一次
❖ SetTimer(1,second*1000,
WM_TIMER消息。
NULL);
SetTimer(0,1000,NULL); ❖ 在OnTimer(UINT_PTR
❖ 在OnTimer(UINT_PTR nIDEvent)中加入响应函数, 捕获nIDEvent==0的那个 WM_TIMER,并判断当前 时间是否等于设定时间。
17
❖ 需求分析 ❖ 实现过程 ❖ 实现情况
内容概要
1
需求分析
❖ 程序功能: 实现一个小闹钟。 首先有两个标签页(CTabCtrl控件类),一个标签是
定时器,设定好时间和提示音乐后点击OK,当设定 的时间到达后(可以使用CTime类),提示音乐响 起;另一个标签是倒计时器,设定好倒计时的秒数, 点击OK后便开始倒计时(使用WM_TIMER消息来 实现计时),当倒计时减小到0时,提示音乐响起。
❖ 3)用create方法创建对话框,使用资源中定义的模板,并 将他们的父窗口设为CTabCtrl,并调整大小和位置。
❖ 4)在主窗口中,捕获Tab Control的页选择事件,在其中 对索引值进行分类,然后就显示你的对话框,注意显示一个 的同时,要隐藏其他的对话框。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
试验三 面向对象程序设计实验
——一个简单的可复用时钟控件
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函数,当然也 需在基类中定义,但是,该函数对于基类来说是 无需函数实现的,因此可定义为纯虚函数。
相关文档
最新文档