




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
可视化编程入门1第一页,共91页。本课程简要介绍Windows应用程序的形式和在VC++集成开发环境下使用MFC编写Windows应用程序的基本方法,以使同学们对面向对象的可视化(Visual)程序设计建立一个初步的概念并掌握一些基本方法,为深入学习和使用VC++和其他可视化编程工具打下基础。
2第二页,共91页。主题
可视化编程概述
使用MFC进行可视化编程
常用控件及其应用
菜单设计
3第三页,共91页。§1
可视化编程概述
●可视化编程的基本特点
●可视化编程方法
●窗口4第四页,共91页。1.1
可视化编程的基本特点
可视化(Visual)编程有三个基本特点:■可视化的图形用户界面设计■使用面向对象方法编程■采用事件驱动的程序运行方式
5第五页,共91页。1.可视化的图形用户界面设计我们已经相当熟悉以下小程序:【例1.1】#include<iostream>usingnamespacestd;intmain(){cout<<"VC++是功能强大的编程工具!"<<endl;cout<<"VC++是面向对象的编程工具!"<<endl;cout<<"VC++是可视化的编程工具!"<<endl;return0;}
6第六页,共91页。【例1.2】#include<iostream>usingnamespacestd;intmain(){doubler;cout<<”请输入圆半径:”<<endl;cin>>r;cout<<”圆周长=”<<2*3.1416*r
<<endl;cout<<”圆面积=”<<3.1416*r*r<<endl;
return0;}
这是基于控制台的文本用户界面应用程序。运行这种程序之后,屏幕出现MS-DOS窗口,并且按照程序代码的流程执行,用户输入数据后即显示执行结果。7第七页,共91页。8第八页,共91页。进行可视化编程,同样可以写出相同功能的程序,程序运行出现如图1和图2所示的窗口。图1中的窗口称为文档窗口,图2中的窗口称为对话框。显然,它们比MS-DOS的文本用户界面更为友好且方便。这种界面称为
图形用户界面(GUI,GraphicalUserInterface)。在非可视化环境下,图形用户界面的设计都需通过编写程序代码来实现,且在设计过程中是看不到界面的实际显示效果的。9第九页,共91页。
VisualStudio支持可视化的图形用户界面设计。Windows应用程序的每个图形界面元素(如对话框、菜单、命令按钮、文本框等)都是可视的,即设计时在显示器屏幕上是可见的,且所见即所得。编程者可根据具体用户界面设计的要求,直接使用VS系统提供的标准工具在屏幕上“画”出各种Windows风格的图形界面元素,而不必为这些界面元素的构建设计大量代码,VS会自动生成这些界面元素的设计代码,开发人员只需为每个图形界面元素设置特定的属性值,代码编写只针对界面元素所要实现的具体功能。
10第十页,共91页。2.面向对象编程方式由于Windows应用程序的复杂性,从图形用户界面到整个应用程序,都是采用面向对象的方法组织的。Windows中的对象可以是所有的规范部件,如窗口、菜单、工具栏、按钮、文本框、以及程序模块等。
从用户的观点看,Windows应用程序有一个窗口,窗口上有若干菜单、命令按钮、图标等界面图形元素;而窗口背后是一些对应的程序。
从MFC的面向对象模型看,一个Windows应用程序可以拆分成许多功能独立的对象,各自负责不同类型的工作,其最基本的构成对象可以分为两大类:程序对象和窗口对象。11第十一页,共91页。一个应用程序的执行就像一场舞台演出。应用程序对象是幕后人员(导演、剧务等),它们负责安排并指挥“演员”(窗口)上场,准备和调度各种演出“资源”(如菜单、工具栏、图标等)。从操作系统来看,具有“法人”地位的是应用程序对象而非窗口对象,应用程序可以占有CPU时间和内存空间,还可拥有演出所需的“资源”。
VisualStudio系统给每个对象分配一个句柄(handle),它是一个4字节长的整数值,是对象的唯一内部编号。应用程序通过句柄访问相应的对象。每个对象除了句柄外,还有一个对象标识符ID,可看作是对象的外部名。ID与句柄的区别主要在于:ID可以是用户自行设定的;而句柄是系统内定的,对用户是透明的,这能防止应用程序直接访问对象的内部信息。12第十二页,共91页。3.事件驱动的程序运行机制
传统的文字用户界面的应用程序都有一个起点和终点,程序中的各模块(函数或对象)的控制过程和执行顺序是在编写程序时精心设置好的,是预知的、确定的,整个程序的运行过程是明确的。这种程序运行机制称为过程驱动。可视化应用程序则采用的是事件驱动的程序运行机制:
事件发出消息,消息激活对象。即应用程序的运行没有严格的起点和终点以及固定的流程,各对象之间没有规定的执行顺序,即程序的运行过程是不明确的,而是由事件及其消息控制着对象的激活和程序的运行过程。对象通常处于循环休眠状态,当发生了某个事件并有相应消息传递给对象,才会按照消息的指示执行程序代码,一次消息的处理工作完毕后又恢复休眠状态以等待下一个事件的发生及其消息的到来。13第十三页,共91页。
事件(event)是什么?事件的含义很广泛,简单地说,事件就是激活对象执行程序代码的一种动作。在Windows的操作环境中,无论系统产生的动作还是运行程序时用户产生的动作都称为事件。最常见的用户事件是鼠标事件和键盘事件。实际上,任何一个拥有设备驱动程序的系统输入设备(包括端口)都可以产生各种事件,发送自己的消息。
消息(message)是VisualStudio定义(WinUser.h头文件)的一种特殊的数据结构(MSG),它打包了“事件”发生的相关信息,例如:消息接收者的句柄、事件的类型和来源、消息参数等。14第十四页,共91页。
Windows系统有各种各样的消息,消息的传递无时不在发生,即使电脑闲置时,还会有系统时间的消息传递出来。任何一个看似十分简单的动作都会引发窗口之间许多消息的交换。在VisualC++中,
什么对象可以产生或接收什么事件,是由MFC规定的。例如,命令按钮有鼠标单击(BN_CLICKED)和双击(BN_DOUBLECLICKED)事件;文本编辑框有改变文本(EN_CHANGE)、接受输入焦点(EN_SETFOCUS)、失去输入焦点(EN_KILLFOCUS)、单击垂直滚动条(EN_VSCROLL)等事件。
15第十五页,共91页。当在对象上发生了某个事件并发出了相应的消息后,接收者对象就要响应并处理该消息。每个需要响应的消息要求对应一个处理该消息的程序——事件驱动程序。响应消息就是启动相应的事件驱动程序。VisualStudio中将响应消息的过程称为消息映射。16第十六页,共91页。1.2可视化编程方法
使用VC++进行可视化编程有两种方法:■基于WindowsAPI函数的编程方法■基于MicrosoftMFC的编程方法
17第十七页,共91页。1.基于WindowsAPI函数的编程方法
API是应用程序编程接口(ApplicationProgrammingInterface)的缩写,是Windows操作系统与Windows应用程序之间的标准接口。作为Windows操作系统的组成部分(shell),API提供了1000多个可供应用程序直接调用的C函数(在WindowsAPI参考手册中有详细介绍),这些函数大致可分为三类:■窗口管理函数:实现窗口的创建、移动和修改功能。■图形设备接口函数:实现与具体显示设备无关的图形操作。■系统服务函数:实现操作系统提供的各种实用服务功能。
18第十八页,共91页。使用API设计Windows应用程序,对于理解和掌握面向对象程序设计的思想和方法是相当关键的,是想成为Windows编程高手的必经之路。但它要求编程者必须熟知Windows应用程序的架构、事件驱动以及消息传递等内部机制,并且仍然必须编写大量代码,即它要求编程者具备较高的专业素质,这对初学者来说无疑是比较困难的。当然,使用API编程更具灵活性和个性化。
API支持所有Windows应用程序的开发系统,如VC++、VB、Java等。
19第十九页,共91页。2.基于MicrosoftMFC的编程方法
MFC是微软基础类库(MicrosoftFoundationClass)的缩写。与API不同,MFC不是Windows操作系统的组成部分,而是微软公司专为VC++开发的配套软件包。与VC6配套的是MFC6.0。
MFC充分使用了面向对象方法中的继承和多态性技术,以类的方式封装了Windows应用程序所涉及的几乎所有的标准部件,如Windows应用程序的架构、各种标准的图形界面元素、其核心是它以C++的形式封装了WindowsAPI的大部分函数。20第二十页,共91页。
MFC是一个很大的类层次体系(MFC6.0中包含了200多个类),它由一个称为CObject的类作为根基类,其他类大部分从该类派生而来,其整个类体系可大致划分为:■基类■应用程序框架类。包括:应用程序类、命令类、文档/视窗类、框架窗口类、文档模板类等■可视对象类。包括:窗口类、对话框类、控件类等■绘图类。包括:绘图工具类、设备描述表类等。■简单数据类型类■通用类
包括:数组类、类表类、映像类■文件和数据库类
包括:文件I/O类、ODBC类、ADO类■Internet和网络工作类
包括:Win32Internet类、WindowsSocket类等■对象链接和嵌入(OLE,ObjectLingkingandEmbedding)类■调试和异常类21第二十一页,共91页。事实上,MFC封装了一个Windows应用程序操作的每一方面,因此使用MFC编程,编程者可以把注意力集中于自己程序所特有的部分,不需要事事亲自动手。与直接调用API函数相比,这将大大减少编程者编写的代码数量,使编程工作变得更容易;同时,程序标准部分由MFC的类来提供,可使程序变得更规范,更具可读性,效率也更高。对编程新手来说,MFC的最大优点是它以高效简洁的方式为编程者做了所有标准部分的工作,特别是编程者可以在不需要写一行代码的情况下完成一个完整的应用程序架构(约需千行代码)。MFC中包含了成千上万行功能强大的、经过优化的Windows程序代码。编程者只要定义了某个MFC类的对象,就可以调用该类的成员函数,轻轻松松完成本该由你自己一行行编写的程序代码。从这点上说,MFC极大地降低了程序开发难度。22第二十二页,共91页。1.3窗口
窗口是Windows图形用户界面的最基本和最重要的部件,每一个Windows程序至少有一个窗口。故Windows图形用户界面也称窗口界面。23第二十三页,共91页。1.框架窗口框架窗口是应用程序的主窗口,负责管理其包容的其他窗口。一个应用程序的最顶层的框架窗口是应用程序启动时创建的第一个窗口。
MFC提供了由基类CWnd(窗口类)派生的4个框架窗口类:
CFrameWnd
CMDIFrameWnd
CMDIChildWnd
Cdialog用于支持三种标准框架窗口:24第二十四页,共91页。■单文档(Singledocument)窗口由CframeWnd类支持。文档窗口主要由边框、标题栏、菜单栏、工具栏、编辑区等组成。■多文档(Multipledocuments,MDI)窗口由多个文档窗口组成,其中第一个打开的是主框架窗口,由CMDIFrameWnd类支持,其他为子框架窗口,由CMDIChildWnd类支持。子框架窗口没有菜单栏和工具栏,它们共享主窗口的菜单栏和工具栏。■对话框(Dialog)对话框是一种特殊类型的窗口,它没有菜单栏和工具栏,且一般不能改变窗口的大小。对话框由Cdialog类支持。25第二十五页,共91页。2.对话框与控件
对话框是应用程序用于显示或提示,并且等待用户输入信息的弹出式窗口。对对话框的操作一般是通过在对话框上添加控件来实现的。对话框与控件密不可分,在每个对话框内都有一些控件,对话框依靠这些控件与用户交互。可以说,对话框是Windows应用程序中最重要的用户界面元素,是应用程序与用户进行交互的主要部件。
控件VisualStudio把主要设置在对话框上的
一些标准的图形界面元素定义为控件(Control)
,如文本框、列表框、命令按钮、复选框等,它们中的大多数可以捕获事件并向对话框发送消息。控件实际上也都是窗口,所有的控件类都是CWnd类的派生类。控件通常是作为对话框的子窗口而创建的。Over26第二十六页,共91页。§2使用MFC进行可视化编程●建立项目架构
●设计图形用户界面●设计对象的事件驱动程序,编写相关代码
●项目的编译、链接和运行
27第二十七页,共91页。
VisualStudio把开发一个应用程序的过程称之为“项目”(Project,很多人把它翻译成“工程”)。开发一个Windows应用程序的项目远比开发一个控制台应用程序项目要复杂得多,工作量也要浩大得多。好在VisualStudio提供了一组强大的MFC项目的开发工具。
开发一个MFC项目通常有四个步骤:
Step.1
建立项目架构
Step.2
设计图形用户界面
Step.3
设计对象的事件驱动程序
Step.4
项目的编译、链接和运行下面结合一个简单的编程实例(Case1)“计算圆的周长和面积”来介绍这四个步骤。28第二十八页,共91页。2.1建立项目架构建立项目架构(skeleton),类似于一个项目的总体设计,它需要确定项目的类型,根据项目类型创建并组织各种基本组件,包括:所有的类、一些基本对象、项目所需的必要资源等。从而为项目搭建起一个完整的架构。29第二十九页,共91页。所谓项目类型,是以项目采用什么框架窗口作为主窗口来界定的。MFC支持三种标准项目类型:■单文档(Singledocument)项目以单文档窗口作为项目主窗口。■多文档(Multipledocuments)项目以多文档窗口作为项目的主窗口。■对话框(Dialogbased)项目以对话框作为项目主窗口。这是最紧凑、最简单的一种标准项目架构。
30第三十页,共91页。
VC++为用户建立项目架构提供了一个强大的工具——
MFCAppWizard
(MFC应用程序向导)。本实例采用的是对话框架构。31第三十一页,共91页。操作步骤
1.选择VC6主窗口菜单栏中的“文件|新建”菜单项,弹出一个如图3所示的“新建”对话框。
2.在对话框中选择“项目”(project)选项卡。选择MFCAppWizard[exe](即MFC应用程序)项,在对话框右部输入项目的路径和项目名,然后单击“确定”按钮。VC++以文件夹方式管理项目,如图3所示,case1是D:\CPPMFC_PRJ\下的一个文件夹,该项目的各种文件都将存放在这个文件夹中。
3.在系统弹出如图4所示的“MFC应用程序向导-步骤1”对话框中进行项目类型选择。先选择单选按钮“Dialogbased”(对话框项目),再单击“下一个”按钮。32第三十二页,共91页。
4.依次选择系统弹出的图5至图7(步骤2至步骤4)中对话框的选项,用户可以先全部采用默认选择,然后在编程过程中再按需要修改。单击图7中的“完成”按钮,或者在出现其中任一个对话框时单击“完成”按钮,表示默认其他选项,系统就不再弹出其他对话框。
5.系统弹出如图8所示的“新建项目信息”对话框,其中列出前面所做的选择内容,单击“确定”按钮。至此,项目架构创建完成,系统回到VC6的集成开发环境,如图9所示。从该窗口的左窗格的各选项卡中可以观察到MFCAppWizard为一个对话框项目的架构创建的所有组件:
33第三十三页,共91页。■CCase1Dlg等三个类其中最主要的是CCase1Dlg类(项目case1的对话框类),它由Cdialog类派生。
34第三十四页,共91页。■case1Dlg.h等四个头文件
case1Dlg.h是最主要的一个头文件,它包含了CCase1Dlg类的声明。35第三十五页,共91页。■case1Dlg.cpp等四个C++源程序文件
case1Dlg.cpp是CCase1Dlg类的实现,它不仅是最重要的源程序文件,而且是整个项目的核心。用户的编程工作主要是在这个文件上完成,它将包含实现具体应用功能的全部代码。
case1.cpp是项目的启动程序,类似于非
Windows应用程序中的main函数。
36第三十六页,共91页。■另外,MFCAppWizard为项目生成了一个对话框窗体、一个项目图标、项目版本等资源。37第三十七页,共91页。至此,虽然一行代码都没有编写,但这个应用程序架构是可以运行的程序。进行编译链接后,其运行结果如图10所示。以这种方式建立的应用程序,其主窗口即是对话框。图10.对话框项目架构的运行结果38第三十八页,共91页。2.2设计图形用户界面●设计工具与设计方案●操作步骤39第三十九页,共91页。1.设计工具和设计方案在完成了对话框项目架构的创建后,VC6窗口上弹出了MFC的对话框编辑器(图11)。对话框编辑器主要用于创建、编辑对话框窗口,向对话框窗体上添加控件和调整布局。对话框编辑器主要包括如下组件:对话框窗体、控件箱、调整(布局)工具栏以及对话框和控件的属性对话框。
对话框窗体是MFC给每个工程默认生成的一个图形资源,它是CCase1Dlg类的图形化。所谓窗体即窗口毛坯,是还未完全成形的初始窗口,它如同一块“画布”,在它上面可以画上各种控件来构成项目所需的实际窗口。窗体的标题栏上显示的是本项目的名字,窗体上可设置网格,用于安排控件的位置和大小。在程序运行时,网格会自动消失。
40第四十页,共91页。
控件箱,MFC设计有20多个标准控件类,每个控件类就是制作控件的工具,控件工具箱,简称控件箱(图12)是存放控件类的容器,这些控件类都以图标式按钮表示。开发人员可利用控件箱在对话框上创建各种所需的控件。
将控件箱中的控件工具复制到对话框窗体中,即在对话框中创建了相应的控件对象,这可通过可视化操作实现:■方法1:用鼠标按住控件箱上所选中的控件图标,拖到对话框中合适的位置。或■方法2:先单击控件箱上所选中的控件图标,然后移动鼠标到对话框中合适的位置。复制到对话框上的控件,可以移动、复制、调整或删除,也可拖动鼠标缩放控件的大小。41第四十一页,共91页。对于本实例,可在对话框上建立如下控件:■1个编辑框:用于用户输入半径值;■5个静态文本框(静态文本框只能显示文本而不能输入文本),其中:
2个静态文本框分别用于显示圆周长和圆面积,其余3个静态文本框分别用于对上述三个文本框进行文字说明。■2个命令按钮,“确定”和“退出”:前者用于确定输入值,计算圆周长和圆面积,然后把结果显示在对应的输出框上;后者用于结束程序的执行。效果如图2。42第四十二页,共91页。2.操作步骤
(1)设置主窗口的属性值
单击对话框窗体,使其成为当前窗口(周围出现8个小方块)。
从VC6窗口的菜单栏上的“查看”菜单中选择“属性”选项,或者用鼠标右击窗体,从弹出的快捷菜单中选择“属性”,都将弹出图13所示的“对话框属性”对话框。
在“常规”(General)选项卡下:该对话框对象的ID默认为:IDD_CASE1_DIALOG将标题值设置为:计算圆周长和圆面积单击“字体”按钮,进行字体属性的设置其余属性采用默认值。关闭属性对话框。
※上述设置在CCase1Dlg类的代码中立即被反映。43第四十三页,共91页。
(2)添加编辑框控件
用鼠标把控件工具箱上的编辑框拖到对话框窗体的合适位置,就建立了一个编辑框控件。
用鼠标右击该编辑框,从弹出的快捷菜单中选择“属性”,弹出如图14所示的编辑框属性对话框。
该编辑框对象的ID默认为:IDC_EDIT1在“样式”(Styles)选项卡中设置相关属性值为:“靠左”(Left)和“垂直居中”(Center)。其余属性采用默认值。关闭属性对话框。44第四十四页,共91页。
(3)添加静态文本框控件
用鼠标把控件工具箱上的静态文本框拖到对话框窗体的合适位置,就建立了一个静态文本框控件。用同样的操作(或复制)建立其他四个静态文本框。
用鼠标右击静态文本框,从弹出的快捷菜单中选择“属性”,弹出如图15所示的静态文本框属性对话框。
可对这5个静态文本框的属性值设置如下:
ID标题其他属性---------------------------------------------------------------------------------
IDC_STATIC1输入半径:居中,垂直居中IDC_STATIC2圆周长居中,垂直居中IDC_STATIC3圆面积居中,垂直居中IDC_STATIC4默认靠左,垂直居中,ClientedgeIDC_STATIC5默认靠左,垂直居中,Clientedge其中,IDC_STATIC4~5作为结果输出框,分别显示圆周长和圆面积;IDC_STATIC1~3分别作为输入框和输出框的文字说明。45第四十五页,共91页。
(4)建立命令按钮控件
建立2个命令按钮,它们的属性值设置如下:
ID标题
---------------------------------------
IDC_BUTTON1
确定
IDC_BUTTON2
退出
---------------------------------------至此,控件在窗体上“摆放”完毕,可以用鼠标调整它们的大小和位置,也可以用调整工具栏调整控件之间的对齐方式、分布、大小规格,以及测试效果,设计好的图形用户界面如图16所示。46第四十六页,共91页。2.3设计对象的事件驱动程序
●设计的工作和方法
●设计工具与设计方案●操作步骤47第四十七页,共91页。1.设计的工作和方法对象的事件驱动程序在VC++中称为消息处理成员函数。对于对话框工程,作为工程的主界面,对话框对象需要响应并处理所有的控件消息。设计对话框的消息处理成员函数的工作主要包括:■确定各个控件要传递的数据;■确定对象的消息映射,即接收什么消息,建立什么消息处理函数;■在消息处理函数的函数体内添加代码。
48第四十八页,共91页。在实际应用中,读取或更新控件上的数据是对话框的非常重要的工作。MFC为此提供了一套标准方法:DDX(DataExchange,数据交换)和DDV(DataValidation,数据校验)技术。
DDX通过成员变量(membervariable)的方式实现对话框与控件之间的数据传递。如果要在对话框的消息处理函数中访问控件上的数据,就必须先在对话框类(CCase1Dlg类)中分别为这些控件添加(声明)一个成员变量,每一个成员变量绑定一个控件。在消息处理函数中是通过成员变量访问控件的。49第四十九页,共91页。成员变量是对话框的public数据成员。有两类成员变量:■Value类成员变量:表示该变量的值为控件的数据。■Control类成员变量:表示该成员变量就代表控件本身,即它是控件的一个对象,其值实际上就是控件的句柄。
DDV用于数据的校验,例如自动校验字符串的长度和取值范围。
50第五十页,共91页。使用MFCDDX/DDV的流程是:①首先定义用于接收控件数据的成员变量。例如,为编辑框IDC_EDIT1定义一个Value类的double型的成员变量,用于接收用户输入的半径值。定义变量的同时可以设定数据取值范围,提供校验。②然后,在对应的消息处理成员函数中调用MFC函数传递数据。最简单的相关MFC函数有:
UpdateData()
//更新成员变量,将控件上的数据传递给成员变量
UpdateData(FALSE)
//更新控件,将成员变量的值传递给控件
51第五十一页,共91页。2.设计工具和设计方案完成上述工作可使用VC++提供的一个强大工具——
MFCClassWizard
(类向导)它主要是用来管理项目中的对象和消息及其消息处理函数的,是MFC编程必不可少的重要工具。52第五十二页,共91页。对于本实例,可设计如下成员变量和消息处理函数:■为编辑框IDC_EDIT1定义一个double型的成员变量m_r,用于接收用户在编辑框中输入的半径值;■为静态文本框IDC_STATIC4和IDC_STATIC5分别定义一个Cstring型成员变量m_girth和m_area用于向静态文本框传递计算结果。静态文本框只能处理Cstring(字符串)型数据。
注意:成员变量名的前缀“m_”是MFC的风格。MFC也有自己的数据类型,不过与C++很相似,容易理解。■为“确定”按钮建立一个“单击”(BN_CLICKED)消息处理函数,用于计算圆周长和圆面积,并显示计算结果。■为“退出”按钮建立一个“单击”消息处理函数,用于结束程序的运行。■建立一个对话框的初始化函数,对成员变量m_r、m_girth、m_area进行初始化。53第五十三页,共91页。2.操作步骤
(1)添加成员变量
打开“MFCClassWizard”(类向导)对话框,如图17所示。方法可以是:从VC6窗口的菜单栏上的“查看”菜单中选择“建立类向导”选项,或者用鼠标右击窗体,从弹出的快捷菜单中选择“建立类向导”,或者按快捷键Ctrl+W。
选择“MemberVariables”(成员变量)选项卡。从“ControlIDs”(控件ID)列表框中,可以看到已经建立的各控件对象的ID。
为编辑框添加成员变量:选择IDC_EDIT1,单击右边的“AddVariable…”(添加变量)按钮,弹出如图18所示的“添加成员变量”对话框
54第五十四页,共91页。
在第一个文本框(Membervariablename)中输入成员变量名,如m_r;在第二个下拉框(Category)中选择成员变量的种类,Value;在第三个下拉框(VariableType)中选择成员变量的数据类型,double。
单击OK按钮。回到“MemberVariables”选项卡,设置变量m_r的取值范围,如最小值为0,最大值为1000.0。
用同样的方法为静态文本框IDC_STATIC4和IDC_STATIC5添加Cstring型成员变量m_girth和m_area,最大字符个数为10(图19)。55第五十五页,共91页。
(2)编写消息处理成员函数①主窗口的初始化函数
切换到类向导的“MessageMap”(消息映射)选项卡,如图20所示。
在“ObjectIDs”(对象名)列表框中选择主窗口的对象名CCase1Dlg;
在“Messages”(消息)列表框中选择消息
WM_INITDIALOG;此时在“Memberfunctions”(成员函数)列表框中会自动指出相应的MFC已定义的虚函数OnInitDialog。(主窗口对象是由MFC默认生成的)56第五十六页,共91页。
单击“EditCode”(编辑代码)按钮,弹出Case1Dlg.cpp文件的编辑窗口,并显示OnInitDialog()函数的代码清单,找到注释提示处:
//TODO:Addextrainitializationhere
(在此下边添加你初始化的代码)
对于本实例,可添加如下代码:
m_r=0.0;
m_girth=m_area="0.000";
UpdateData(FALSE);
//将数据传给控件并显示
57第五十七页,共91页。BOOLCCase1Dlg::OnInitDialog(){ CDialog::OnInitDialog();
……………
//TODO:Addextrainitializationhere m_r=0.0; m_girth=m_area="0.000"; UpdateData(FALSE);//将数据传给控件并显示
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol}58第五十八页,共91页。②“确定”按钮的消息处理函数类似上述方法,
在“ObjectIDs”列表框中选择IDC_BUTTON1;在“Messages”列表框中选择消息BN_CLICKED;
单击“AddFunction”(添加函数)按钮,此时在“Memberfunctions”列表框中会出现一个新的函数名OnButton1,表示系统为该对话框生成了一个新成员函数(图21);
单击“EditCode”(编辑代码)按钮,弹出
Case1Dlg.cpp文件的编辑窗口,并显示OnButton1()函数的代码清单,找到注释提示处:
//TODO:Addyourcontrolnotificationhandlercodehere(在此下边添加控件消息的处理代码)
59第五十九页,共91页。
对于本实例,可添加如下代码:
UpdateData();
//将编辑框的数据传递给成员变量
doublegirth=2*3.1416*m_r;
//计算圆周长
doublearea=3.1416*m_r*m_r;
//计算圆面积
m_girth.Format(“%10.3f”,girth);
//按格式写入成员变量
m_area.Format("%10.3f",area);
UpdateDtata(FALSE);
//将数据传给控件并显示注:函数Fornat()是CString类的成员函数,用来把数据转换成CString类型的字符串。60第六十页,共91页。voidCCase1Dlg::OnButton1(){//TODO:Addyourcontrolnotificationhandlercodehere
UpdateData();
//将编辑框的数据传递给成员变量
doublegirth=2*3.1416*m_r;
//计算圆周长
doublearea=3.14
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 终止薪资合同协议
- 租赁合同变更地址协议
- 签协议合同纠纷
- 新招标代理合同范本
- 购车合同协议书
- 购买电脑合同书
- 经验分享2024年园艺师考试的集体备考技巧试题及答案
- 2024年农艺师考试相关知识树的构建与应用试题及答案
- 2024年农艺师考试中的关键竞争力试题及答案
- 古典文学面试题及答案
- 2025年浙江省杭州市拱墅区中考语文模拟试卷含答案
- 原发性高血压护理措施
- 路面工程安全专项施工方案
- 人工智能基础(Python实现)-课件 第8章 生成式大模型应用
- 语义演变与认知机制-深度研究
- 2024年安徽宁马投资有限责任公司招聘10人笔试参考题库附带答案详解
- 做新时代的忠诚爱国者课件
- 纪检监察审查调查业务培训
- 《变频器原理及应用》课件
- 2024年中考模拟试卷英语(苏州卷)
- 摄像服务行业品牌建设研究-深度研究
评论
0/150
提交评论