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框中。
第4部分--实训1 MFC 面向对象程序设计
到此:100%
谢谢大家
祝学习进步
心情愉快Biblioteka (4)添加运算结果”=“对应的函数: 先得到第一个操作数(比如被加数),然后根据当前的操作类型(加减 乘除)计算结果,并输出到编辑框。 (5) 功能扩展(选做): (a) 为计算器添加平方,开根号(sqrt)等运算。 (#include “math.h”) (b) 如果要让其实现连续运算,比如8+6-3,该如何实现。
(3) 用ClassWizard添加编写定时器函数OnTimer(UINT nIDEvent) 。 (4) 添加对话框类的OnCreate函数
到此:60%
扩展一: 绘制表盘,时针,分针,秒针的代码分别单独做成一个函数 例如: 绘制表盘DrawFace(CDC *pDC,CRect &rc) 用于绘制表盘及表盘上数字
4.2 作业:绘制时钟
目的:熟悉CDC绘图应用。 具体操作步骤如下: (1) 用MFC AppWizard(.exe)创建一个基于对话框的应用程序,项目名Clock。 (2) 在OnPaint函数中添加绘制时钟(修改并添加代码)
在此处添加代码
注意:不要忘记#include “math.h”(因为你要使用正弦余弦函数)
面向对象程序设计
第4部分 案例实训
案例介绍:
案例4.1:计算器 案例4.2:基于对话框绘制时钟
4.1 作业:计算器
目的:熟悉常用控件的应用。 具体操作步骤如下: (1)用MFC AppWizard(.exe)创建一个基于对话框的应用程序,项目名 Computer。 (2)对话框名称改为“计算器”,删除对话框原有控件。为对话框添加一个 编辑框IDC_EDIT1(文字右对齐),16个按钮控件,按钮显示文字如下图所 示。(比如IDC_BUTTON0~IDC_BUTTON9对应文字0~9)
MFC实现简单的小闹钟
播放声音
❖ 加入Mmsystem.h头文件。 ❖ 加入winmm.lib文件。可以在工程中设置,也可以在文件中
加入以下语句: #pragma comment(lib,"winmm.lib") ❖ 用PlaySound()函数播放声音。
11
最小化到托盘
❖ 把程序放到托盘上的本质就是先在托盘区绘制一个图标,然 后把程序隐藏不见,再对托盘的图标进行消息处理,就可以 了。 绘制图标以及确定图标所传送消息的函数只有一个, 那就是——— WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid );
❖ 需求分析 ❖ 实现过程 ❖ 实现情况
内容概要
1
需求分析
❖ 程序功能: 实现一个小闹钟。 首先有两个标签页(CTabCtrl控件类),一个标签是
定时器,设定好时间和提示音乐后点击OK,当设定 的时间到达后(可以使用CTime类),提示音乐响 起;另一个标签是倒计时器,设定好倒计时的秒数, 点击OK后便开始倒计时(使用WM_TIMER消息来 实现计时),当倒计时减小到0时,提示音乐响起。
14
然后就是在CPP文件中加入函数onShowTask的实现了:
15
实现情况
❖ 基本功能实现。但是不是很实用,每次定时之后要么保持程 序一直运行,要么在设定时间到达之前手动开启才能听到闹 铃。
解决方案的设想: 1.设置开机启动,让程序自动运行。 2.设置任务计划,在特定的时间开启程序。
16
Thank You!
❖ 程序已经最小化到托盘区了,但是呢,对托盘图标的操作如何进行呢? 这就体现了结构NOTIFYICONDATA的成员uCallbackMessage 的作用 了。它所提供的作用就是,当用户用鼠标点击托盘区的图标的时候(无 论是左键还是右键),会向hWnd所代表的窗口传送消息,如果是上例, 消息的名称就是WM_SHOWTASK。根据VC的消息机制,对自定义消 息增加消息响应函数。
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计算器-小闹钟-通讯录设计(含源文件)
面向对象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,程序设计⽼师布置”画板“和”模拟时钟“作为实验来实践,由于没去上课,⽹上搜索的很多教程⼏乎都是以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⽂件导⼊。
实验1 创建对话框应用程序及控件使用
实验1 创建对话框应用程序及控件使用一.实验目的1.掌握使用“MFC应用程序向导”创建对话框应用程序框架的方法2.掌握给对话框添加控件的方法,以及使用“MFC类向导”为控件通知消息映射消息处理函数的方法3.掌握使用“MFC类向导”为控件添加控件变量的方法4.掌握控件变量与控件的数据交换机制以及使用控件变量访问和控制控件的方法5.掌握对话框中添加自定义消息的方法二.实验内容1.创建一个Windows对话框应用程序,其界面要求实现以下功能:在下部的文本编辑框(Edit Control )中输入内容后,单击“添加”按钮,文本编辑框的内容被作为一个条目添加到上部的列表框(List Box)中2.为上一步创建的程序添加一条自定义消息,消息名为WM_MYMESSAGE,也可自己命名。
单击“添加”按钮时,将发送盖消息,该消息的处理函数将删除编辑框中已输入的所有内容。
三.实验步骤1.使用“MFC应用程序向导”创建一个对话框应用程序,项目名称编程者自己确定。
2.将主动生成的对话框中的静态文本控件和“取消”命令按钮删除,在窗口上部添加一个列表框(List Box)控件,在列表框中的静态文本控件和“取消命令按钮删除,在窗口上部添加一按钮左侧添加一个命令按钮(Button)控件.3.将“确定”按钮的caption属性修改为“退出”,新添加的命令按钮的caption属性修改为“添加”,修改对话框窗口的caption属性为“实验1”,调整各控件的大小和布局如上图所示。
4.为列表框控件添加一个控制变量,类别为control,变量名编程者自己确定,这里取名为m_list,为编辑框控件添加一个控制变量,类别为value,类型Cstring,变量名为m_Edit,也可由编程者自己确定。
5.为“添加”按钮添加并编写BN_CLICKED消息的消息处理函数,该函数代码如下:Void CShiyanDlg : : OnBnclickedButton1( ){//TODO:在此添加控件通知处理程序代码UpdateData(true); //将控件中的数据交换至控件变量If(!m_Edit . ISEmpty()) //如果编辑框内容不空,则将内容添加至列表框M_List . Addstring(m_Edit);}6.编译运行程序,在文本编辑框中输入内容并单击“按钮”,观察执行结果。
visual c++2010 mfc实例
visual c++2010 mfc实例Visual C++2010是一款由微软开发的集成开发环境(IDE),用于编写Windows操作系统上的应用程序。
MFC(Microsoft Foundation Classes)是Visual C++中的一个类库,它提供了一系列的类和函数,方便开发者构建Windows图形界面应用程序。
在Visual C++2010中,可以利用MFC来创建各种各样的应用程序,包括窗口应用程序、对话框应用程序、文档视图应用程序等等。
下面我们来介绍一些MFC实例,概括地展示如何使用MFC来编写Windows应用程序。
1.窗口应用程序的创建:首先,打开Visual C++2010,选择“新建项目”,在弹出的对话框中选择“Visual C++”->“MFC”->“MFC应用程序”,填写要创建的项目的名称和存储位置,点击“确定”按钮。
接下来,在“应用程序类型”选项中,选择“单文档”、“多文档”或“无文档”视图,然后在“使用的特性”选项中,选择需要的功能(如ActiveX控件等),点击“完成”按钮即可创建窗口应用程序。
2.对话框应用程序的创建:打开Visual C++2010,选择“新建项目”,在弹出的对话框中选择“Visual C++”->“MFC”->“MFC应用程序”,填写要创建的项目的名称和存储位置,点击“确定”按钮。
在接下来的对话框中,选择“对话框”作为应用程序的初始视图,点击“完成”按钮即可创建对话框应用程序。
3.消息处理:在MFC中,可以通过重写消息处理函数来响应特定的消息。
在窗口或对话框类中,可以重写相关的消息处理函数,如OnPaint、OnMouseMove等,然后在这些函数中进行相应的操作。
4.绘图操作:在MFC中,使用CDC类进行绘图操作。
可以在OnPaint函数中使用CDC对话框上的绘图设备进行绘制,也可以在自定义的函数中使用CDC类进行绘图。
基于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的实验报告
基于mfc的实验报告摘要本实验旨在通过使用MFC(Microsoft Foundation Classes)开发框架,实现一个简单的图形化界面程序。
通过这次实验,我深入理解了MFC框架的基本原理和开发流程,并成功完成了一个简单的图形化界面程序。
1. 引言MFC是微软公司开发的一套C++类库,用于创建Windows平台上的应用程序。
它建立在Windows API之上,简化了Windows操作系统的编程方式。
MFC 提供了一系列的类和函数,包括窗口(Window)、对话框(Dialog)、消息映射(Message Map)等,极大地简化了Windows应用程序的开发过程。
2. 实验目的本实验主要目的是熟悉MFC框架的基本原理和开发流程,实现一个简单的图形化界面程序。
通过本实验,能够掌握MFC框架中的窗口创建、消息处理、界面设计等基本概念和操作。
3. 实验过程3.1 环境配置首先,需要在计算机上安装Visual Studio和MFC组件。
打开Visual Studio,创建一个新的MFC应用程序项目,并选择对话框类型作为项目的基础结构。
3.2 窗口创建在MFC应用程序中,窗口是最基本的界面单位。
通过菜单选择“添加类”的方式,创建一个新的对话框类,并继承自CDialog类。
在新建的对话框类中,可以定义与界面相关的成员变量和控件。
3.3 控件添加在对话框设计界面中,可以通过拖拽和调整控件的方式,向对话框中添加各种控件,如按钮、文本框、列表框等。
每个控件都有自己的属性和事件响应函数。
3.4 消息映射消息映射是MFC框架的核心概念之一。
通过消息映射,可以将用户的操作(如点击按钮)与特定的函数关联起来。
在对话框类中,可以通过DECLARE_MESSAGE_MAP和BEGIN_MESSAGE_MAP宏定义来实现消息映射关系的建立。
3.5 编译和运行完成界面设计和消息映射后,即可对程序进行编译和运行。
在编译过程中,MFC 会自动将资源文件编译成可执行的文件。
visual c++2010 mfc实例
visual c++2010 mfc实例MFC(Microsoft Foundation Classes)是微软公司为Windows操作系统开发的一套基于C++的编程框架,它允许开发人员使用面向对象的方式构建Windows应用程序。
在Visual C++ 2010中,MFC库得到了全面的支持,提供了丰富的工具和功能,可以快速开发Windows界面应用程序。
MFC实例的一个常见应用是创建一个基本的窗口应用程序。
下面我们来看一个简单的实例,展示如何使用Visual C++ 2010 MFC创建一个窗口应用程序。
首先,打开Visual C++ 2010,选择“新建项目”并选择“MFC应用程序”。
在下一步中,选择“对话框”作为应用程序类型,并为项目命名。
接下来,我们需要设计一个用户界面。
在MFC中,用户界面是通过对话框来实现的。
双击“resource.h”文件,打开资源编辑器。
在资源编辑器中,可以创建对话框,并在其中添加所需的控件,比如按钮、标签等。
可以使用拖放的方式将这些控件添加到对话框中,并设置它们的属性。
在窗口应用程序中,通常需要在用户点击按钮时执行某些操作。
在资源编辑器中双击某个按钮,会自动为这个按钮生成一个事件处理函数。
在这个函数中,可以编写所需的逻辑代码。
例如,可以在点击按钮时显示一个消息框,可以使用以下代码来实现:```void CMyDialog::OnButtonClick(){MessageBox(L"Hello, World!", L"提示", MB_OK);}```这个函数会在用户点击按钮时被调用,并显示一个消息框。
在完成界面设计和事件处理函数编写后,还需要修改应用程序的入口点。
打开“MainFrm.cpp”文件,找到“CMainFrame::OnCreate”函数。
在这个函数中,会创建主窗口。
可以在此处设置主窗口的标题、样式等属性。
最后,点击“生成”菜单中的“生成解决方案”选项,编译并运行应用程序。
Visual C++基于对话框的MFC应用程序---文本编辑应用实例实验二
2.文本编辑应用示例首先创建一个基于对话框的应用程序,取工程文件名为:ch2.dsp。
即在新建文件的New 对话框中,选中Project 页,然后选择 MFC AppWizard(exe)选项,在Project name 框中输入:ch2。
在生成的对话框中删除[TODO:在这里设置对话控制。
]静态框和[取消]按钮,并将[确认]按钮的文本改为[返回]。
如图2-1所示。
图2-12.1对话框界面设计1.添加文本编辑框文本编辑框操作步骤如下:(1)添加文本编辑框,用于输入文件名。
选定控件工具栏中文本编辑按钮(Edit Box),本编辑框,并调整至合适的大小;(2)设置文本编辑框属性。
用鼠标右击该文本编辑框,在出现的菜单中选择属性(Properyies)菜单项,弹出属性对话框;(3)选择控件的标识符。
在属性对话框中选择General页,并确认ID 框中的标识符为:IDC_EDIT1,其余属性均维持默认状态;(4)单击属性对话框右上角的关闭按钮,关闭属性对话框;(5)按上述步骤制作右下部的文本编辑框,用于输入查找字符串,并确认其标识符为:IDC_EDIT2。
2.添加格式文本编辑框格式文本编辑框操作步骤如下:(1)选定控件工具栏中格式文本编辑按钮(Rich Edit),拖曳出一个格式文本编辑框,并调整至合适的大小;(2)打开其属性(Rich Edit Properties),在General页中确认标识符为:IDC_RICHEDIT1,同时在Styles页中进行设置(如图2-2所示)。
图2-23.添加按钮和静态框为对话框添加[打开]、[保存]、[查找] 3个按钮,它们的标识符分别为:IDC_BUTTON1、IDC_BUTTON2 和IDC_BUTTON3。
通过类向导或双击3个按钮的图标,为CCh3_2Dlg类加载OnButton1( )、OnButton2( ) 、OnButton3( ) 3个响应函数,分别完成打开文件、保存文件和查找字符串功能。
2.VS2010实验 基于对话框的MFC程序
VS2010实验基于对话框的MFC程序实现功能:单击文本编辑框,可输入字符串;单击擦除,可清除文本框内容;单击大写,将文本全部变为大写;单击小写,将文本全部变为小写; 单击退出,关闭程序。
1.启动VS2010,选文件,新建,项目。
选择MFC应用程序,输入名称:example,确定。
点下一步,选基于对话框,去掉使用unicode字符集,完成:之后,出口中出现这个样子:直接点编译运行,会出现一个对话框,点确定,关闭这个对话框:2.单击左侧的‚资源视图resource view‛,dialog下面的IDD_EXAMPLE_DIALOG,代码编辑框中出现EXAMPLE_DIALOG将对话框中的‚取消‛和‚TODO:再此放置对话框控件‛选中后,按del直接删掉。
并从右下角工具箱中拖入如下圈出的四样东西。
对话框的大小,即控件的位置都由鼠标调整。
2.修改static控件的文字,单击它,然后直接输入就可以。
注意左下角属性中,它的ID,是IDC_STATIC。
对话框的ID都是‚IDC_‛开头的,而基于菜单的都是‚ID_‛开头的。
3.选中文本编辑框,将它的ID改为IDC_CONTROL_EDIT.4.单选按钮,先将旁边的文字‘Radio1’改为‘大写’,第二个改为‘小写’。
再将他们的ID,第一个改为IDC_UPPER_RADIO,第二个改为IDC_LOWER_RADIO。
将button1改为擦除,ID改为‚IDC_ERASE_BUTTON‛确定改为退出,IDC_EXIT_BUTTON。
至此,完成界面设计工作,下面添加消息处理函数。
5.单击项目,类向导,打开MFC class wizard类名为CexampleDlg,点成员变量选项卡,选中IDC_CONTROL_EDIT,点右侧的添加成员变量,成员变量名及类别如下图所示,完成后单击确定。
出现一个成员变量:回到命令选项卡,在对象ID中选择IDC_EXIT_BUTTON,在消息中选择BN_CLICKED,单击右侧‚添加处理程序‛。
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类中的基本操作,例如,添加新类,新变量,创建新的对话框,添加控件等方面的知识。
visual c++2010 mfc实例
visual c++2010 mfc实例以下是一个简单的 Visual C++ 2010 MFC 示例,展示了一个基本的对话框应用程序:// SampleMFCAppDlg.h#pragma onceclass CSampleMFCAppDlg : public CDialogEx{public:CSampleMFCAppDlg(CWnd* pParent = nullptr);enum { IDD = IDD_SAMPLEMFCAPP_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX);virtual BOOL OnInitDialog();DECLARE_MESSAGE_MAP()};// SampleMFCAppDlg.cpp#include "SampleMFCApp.h"#include "SampleMFCAppDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endifCSampleMFCAppDlg::CSampleMFCAppDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_SAMPLEMFCAPP_DIALOG, pParent){}void CSampleMFCAppDlg::DoDataExchange(CDataExchange* pDX) {CDialogEx::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CSampleMFCAppDlg, CDialogEx)END_MESSAGE_MAP()BOOL CSampleMFCAppDlg::OnInitDialog(){CDialogEx::OnInitDialog();return TRUE;}// SampleMFCApp.cpp#include "SampleMFCApp.h"#include "SampleMFCAppDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endifCSampleMFCAppApp theApp;BOOL CSampleMFCAppApp::InitInstance(){CWinApp::InitInstance();CSampleMFCAppDlg dlg;空dlg.DoModal();return FALSE;}// SampleMFCApp.rc (资源文件)#include "resource.h"IDD_SAMPLEMFCAPP_DIALOG DIALOGEX 0, 0, 300, 200STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Sample MFC App"FONT 8, "MS Shell Dlg", 0, 0, 0x1BEGINDEFPUSHBUTTON "OK",IDOK,210,10,50,14PUSHBUTTON "Cancel",IDCANCEL,210,30,50,14END// SampleMFCApp.h (头文件)#pragma once#include "afxwin.h"class CSampleMFCAppApp : public CWinApp{public:virtual BOOL InitInstance();};// main.cpp#include "SampleMFCApp.h"#ifdef _DEBUG#define new DEBUG_NEW#endifCSampleMFCAppApp theApp;int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// TODO: 在此处放置代码。
实验一 VC编程环境基础实验
实验一VC编程环境基础实验(4学时)一实验目的1.掌握Visual Studio软件的安装方法2.熟悉Visual Studio集成开发环境的菜单与工具3.掌握基于Visual Studio的VC++项目创建与调试方法二实验原理Visual Studio(VS)是目前最流行的Windows平台应用程序的集成开发环境。
最新版本为Visual Studio 2013 版本,基于.NET Framework4.5.1。
VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。
所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight及Windows Phone。
支持的开发语言环境有Visual Basic、Visual C++,面向Java开发的Visual J++和面向数据库开发的Visual FoxPro等。
三实验内容1.Visual Studio 2008集成开发环境的安装首先将安装镜像文件VS2008ProEdition90DayTrialCHSX1435983.iso进行解压。
在解压后的文件夹中找到setup子文件夹,在其中找到setup.exe安装文件,双击该文件,安装程序启动。
在下面的对话框中选择同意许可协议,然后选择next。
在下面的对话框中选择安装路径,并选择安装类型为Default。
然后点击Install开始安装。
接下来,安装过程开始,出现以下对话框等待整个安装过程执行完毕,出现以下对话框点击Finish,安装过程结束。
2. 学习Visual Studio2008集成开发环境的菜单和工具首次运行VS2008程序,出现选择默认环境配置界面选择Visual C++开发设置,然后点击启动Visual Studio。
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项,即选择单击按钮事件,如图所示。
Visual C++ MFC 简明教程(一)
Visual C++ MFC 简明教程(一)Visual C++ MFC 简明教程是一份非常有价值的学习材料,尤其对于那些对 C++ 编程语言和应用程序开发一无所知的初学者来说。
本教程的主要目的是让读者掌握使用 Microsoft Foundation Classes(MFC)框架的 Visual C++ 语言快速创建 Windows 应用程序的方法。
本教程基于 Visual Studio 2017 和 Windows 10 操作系统,以下是一些简单的步骤和说明:第一步,安装 Visual Studio。
可以在 Microsoft 官网上下载Visual Studio 的最新版本。
安装完成后,选择“创建新项目”并选择“MFC 应用程序”作为项目类型。
第二步,添加控件。
可在工具箱中找到并选择相应的控件,例如按钮、文本框等。
在设计模式下,从工具箱拖动控件并放置到窗体上。
第三步,处理控件事件。
在应用程序中,每个控件都有相应的事件。
例如,按钮可以处理“单击”事件。
单击之后,会调用一个相关的函数并执行该事件需要完成的任务。
第四步,添加消息处理程序。
为了处理事件,需要将事件与消息处理函数相关联。
选择控件,右键单击打开“属性”对话框,选择“事件”选项卡,选择相应的事件,然后双击该事件以创建新的消息处理程序。
第五步,编写代码。
可在“OnEventName”函数内编写代码来执行事件所需的特定操作。
例如,当单击按钮时,可以在该函数中编写代码来显示一个文本框中的消息。
最后,可以通过选择“生成”菜单将程序构建到本地计算机上并运行程序以查看结果。
在本教程中,还有许多其他有用的内容,例如如何处理对话框、文件、菜单、工具条、状态栏等。
通过本教程,读者将学习如何使用 MFC 框架快速创建 Windows 应用程序。
总之,如果你正在寻找一份易于理解和实用的 Visual C++ MFC 简明教程,那么这份材料将是你最佳的选择。
它提供了从入门到精通所需的一切内容,而且非常容易上手。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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框中。
注意,添加OnTimer( )函数的过程与上述过程相似,只是第(3)步选择WM_TIMER消息,而不是WM_CTLCOLOR。
添加完毕后,按[OK]按钮退出类向导。
回到项目工作区,在项目工作区窗口展开CCh1Dlg类,可以看到类中添加了OnCtlColor( )和OnTimer( )两个消息响应函数。
1.2 静态框控件1.静态框控件与CStatic类静态框的功能是通过MFC类库中的CStatic类实现的。
静态框可以用来显示文本、位图或图元文件等。
示例ch1中的日历框和时钟框就是通过静态控件实现的,为此,下面将围绕示例介绍静态控件使用方法。
首先在对话框中添加一个显示内容为“当前时间”的静态框,步骤如下:(1)添加静态框。
参考图1-1,用鼠标器单击右边控件工具栏中静态控件(Static Text)按钮,通过鼠标在对话框左边偏上的位置上拖曳出一个静态框,调整静态框到合适的大小;(2)打开静态控件属性对话框。
右击该静态框,从弹出菜单中选择属性(Properties)菜单项,弹出属性(TextProperties)对话框;(3)更改静态框中文本内容。
在属性对话框中选择General 页,将Caption框的内容修改为:当前时间:(4)单击属性对话框右上角的关闭按钮,关闭属性对话框。
接着添加一个显示内容为“00:00:00”的时钟静态框:(1)重复上面(1)、(2)两步操作,在“当前时间:”静态框下方添加一个新的静态框;(2)更改静态控件标识符和文本内容。
在属性对话框中选择General页,将ID框的标识符IDC_STATIC改为:IDC_STATIC1,将Caption框的内容修改为:00:00:00;(3)设置文本对齐方式。
在属性对话框中选择Styles页,从Align text列表框中选择Center选项、在多选框中选中Center Vertically选项;(4)设置边框样式。
在属性对话框中选择Extended Styles 页,选中Static edge项;(5)单击属性对话框右上角的关闭按钮,关闭属性对话框。
最后,按上述方法在对话框的右侧添加一个日历静态框,其属性参数设置如下:(1)在属性对话框中选择General页,将ID 框的标识符IDC_STATIC改为:IDC_STATIC2,将Caption框的内容修改为:\n 2004年03月\n\n 12日\n\n 星期五其中“\n”表示换行,而插入空格是为了调整日期显示的位置;(2)在属性对话框中选择Styles页,从Align text列表框中选择Left选项;(3)在属性对话框中选择Extended Styles页,选中Modal frame 项。
对话框界面设计(如图1-2所示)。
图1-22.更改静态框文本内容程序运行时,用户无法通过键盘输入更改静态框的内容。
如需要动态地变更静态框的内容,可通过编程来实现。
为此需要在CCh3_1Dlg类中添加两个分别与IDC_STATIC1、IDC_STATIC2静态控件相关成员变量,操作如下:(1)在View菜单中选择ClassWizard菜单项,打开类向导(MFC ClassWizard)窗口,并选择Member Variables页;(2)添加成员变量m_Static1。
在Member Variables页的Control Ids 框中选择标识符IDC_STATIC1,并点击[Add Variables…]按钮,弹出添加成员变量(Add Member Variables)对话框,在成员变量名(Member variables name)框内输入:m_Static1,并在种类(Category)、变量类型(Variable type)框内依次输入或选择:Control、CStatic。
按[OK]按钮,退出添加成员变量对话框;(3)添加成员变量m_Static2。
在Member Variables页的Control Ids 框中选择标识符IDC_STATIC2,并点击[Add Variables…]按钮,弹出添加成员变量(Add Member Variables)对话框,在成员变量名(Member variables name)框内输入:m_Static2,并在种类(Category)、变量类型(Variable type)框内依次输入或选择:Control、CStatic。
按[OK]按钮,退出添加成员变量对话框;(4)按[OK]按钮,退出类向导(MFC ClassWizard)窗口。
在项目管理区中双击CCh1Dlg类,这时程序代码窗口CCh1Dlg 类的头文件中,可以看到如下代码:// Dialog Data//{{AFX_DATA(CCh1Dlg)enum { IDD = IDD_CH1_DIALOG };CStatic m_Static2; //由类向导自动插入CStatic m_Static1;//}}AFX_DATA其中插入了CStatic 类型的成员变量m_Static1,该变量为静态控件对象,它通过标识符IDC_STATIC1与图1-2中所示的时钟静态框对应,而m_Static2则通过标识符IDC_STATIC2与日历框对应。
在项目管理区中展开CCh3_1Dlg类,双击OnInitDialog()函数,代码编辑窗口出现该函数的代码,在该函数的结尾部分加上如下代码:BOOL CCh1Dlg::OnInitDialog( ){CDialog::OnInitDialog( )……// TODO: Add extra initialization hereCString str=_T("10:10:10");m_Static1.SetWindowText(str); //更改时钟框的内容return TRUE; // return TRUE unless you set the focus to a control重新编译链接该程序,执行后时钟框显示的内容为:10:10:10。
3.如何获取当前时间为了使该静态框能正确显示当前时间,必须要解决两个问题,首先是如何获取当前系统时间,其次是如何才能不断及时地刷新时钟框的时间。
在MFC应用程序中,不但可以调用Windows API函数,也可以使用C语言运行库函数time_t time(time_t * timer);和struct tm *localtime(const time_t *timer); 要及时地刷新时钟框,需要有相应事件来触发。
为此,可以通过加载系统定时器消息WM_TIMER的响应函数OnTimer( )来实现,用户可以通过SetTimer( )函数设定定时值,这样当定时时间一到,函数OnTimer( )就会自动响应。
我们已经在CCh1Dlg 类中加载了OnTimer( )函数,在项目管理工作区中展开CCh1Dlg类,双击OnTimer( ),将程序代码区的光标移到该函数,加入如下代码:void CCh1Dlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaulttime_t m_time;tm *t;int hour,hour1,min,sec;int year,mon,day,week;CString s;CString s1[7]={"日","一","二","三","四","五","六"};time(&m_time); //获取当前时间值存入m_time t=localtime(&m_time); //转换为tm结构类型hour=t->tm_hour;min=t->tm_min;sec=t->tm_sec;hour1=hour%12; //24小时制转换成12小时制year=t->tm_year+1900;mon=t->tm_mon+1;day=t->tm_mday;week=t->tm_wday;s.Format("%02d:%02d:%02d",hour,min,sec);//将当前时钟送到IDC_STATIC1静态框显示m_Static1.SetWindowText(s);s.Format("\n %4d年%2d月\n\n %2d日\n\n 星期",year,mon,day);s+=s1[week];//将当前日历送到IDC_STATIC2静态框显示m_Static2.SetWindowText(s);SetTimer(0,500,NULL); //重置定时器CDialog::OnTimer(nIDEvent);}为了启动系统定时器,须在CCh1Dlg类的初始化函数OnInitDialog( )中加入SetTimer( )函数,插入的位置如下:// TODO: Add extra initialization hereCString str=_T("10:10:10");m_Static1.SetWindowText(str); //更改时钟框的内容SetTimer(0,500,NULL); //重置定时器return TRUE; // return TRUE unless you set the focus to a control}编译、运行后如下图4.设置静态框字符和背景的颜色静态控件框字符和背景一般使用系统默认的颜色,但也可以改变默认设置,选择用户所需的色彩。