可视化编程基础课件.ppt
第第7章章 Visual C+可视化编程基础可视化编程基础7.1 Windows程序设计概述程序设计概述7.2 API及应用程序基本框架及应用程序基本框架7.3 MFC及应用程序框架及应用程序框架7.4 对话框与常用控件对话框与常用控件7.5 菜单、工具栏与状态栏设计菜单、工具栏与状态栏设计7.6 文档文档/视图结构应用程序视图结构应用程序7.7 程序举例程序举例7.1.1基于Visual C+的Windows应用程序设计方法 7.1 Windows程序设计概述程序设计概述 用Visual C+编写Windows应用程序主要有两种方法:1Application Programming InterfaceAPI API是Windows系统和Windows应用程序间的标准程序接口,应用程序可以通过此接口访问系统。凡是在Windows工作环境下执行的应用程序都可以通过调用API函数来实现各种功能的操作。在Windows程序设计的初期,程序员所能做使用的编程工具就只有使用API函数,通过API函数的调用组合,就可以搭建出各种界面丰富、功能灵活的应用程序。2Microsoft Foundation ClassMFC MFC是Visual C+的核心,是 Microsoft公司提供的用来编写Windows应用程序的C+类库,集成了大量已经预先定义好的类,大约有200多个,用户可以根据编程的需要调用相应的类或自定义有关的类。这些类可以分成两种:一是CObject类的派生类;二是非CObject派生类,如表示点的CPoint类,表示矩形的CRect类等。7.1.2 Windows程序设计的基本概念 Windows应用程序的特点:应用程序的特点:具有标准的图形用户界面。具有标准的图形用户界面。具有与硬件无关的特性。具有与硬件无关的特性。采用采用“消息传递,事件驱动消息传递,事件驱动”的运行机制。的运行机制。1窗口与对象窗口与对象 窗窗口口是是应应用用程程序序与与用用户户之之间间交交互互的的接接口口环环境境。用用户户可可以以通通过过窗窗口口输输入入数数据据,控控制制应应用用程程序序的的运运行行;应应用用程程序序可可以以通通过过窗窗口口显示数据和运行状态。显示数据和运行状态。对对象象是是指指Windows的的规规范范部部件件,包包括括各各种种窗窗口口、菜菜单单、按按钮钮、对话框以及程序模块等。对话框以及程序模块等。2常用常用Windows数据类型数据类型 Windows应用程序的源程序中包含种类繁多的数据类型,应用程序的源程序中包含种类繁多的数据类型,其中其中windows.h是用户调用系统功能的关键,文件中定义了是用户调用系统功能的关键,文件中定义了Windows系统使用的数据类型。系统使用的数据类型。3句柄句柄 句柄是指系统创建对象后返回的用来代表该对象的一个唯句柄是指系统创建对象后返回的用来代表该对象的一个唯一的一的4字节长整数值,是整个字节长整数值,是整个Windows编程的基础,用于标识应编程的基础,用于标识应用程序中不同的对象和同类对象中不同的实例。例如,一个窗用程序中不同的对象和同类对象中不同的实例。例如,一个窗口、按钮、图标、滚动条、输出设备、控件或者文件等。应用口、按钮、图标、滚动条、输出设备、控件或者文件等。应用程序通过句柄能够访问相应的对象信息,它代表对对象的引用。程序通过句柄能够访问相应的对象信息,它代表对对象的引用。4事件驱动事件驱动 Windows应用程序以消息为基础,以事件驱动之。应用程序以消息为基础,以事件驱动之。Windows应用程序启动之后将进入一个消息循环,等待系统或应用程序启动之后将进入一个消息循环,等待系统或应用程序的消息,消息的产生是因为事件发生的结果,应用程序的消息,消息的产生是因为事件发生的结果,Windows程序设计主要围绕编写事件或消息的响应函数上。程序设计主要围绕编写事件或消息的响应函数上。5消息及其在消息及其在Windows编程中的应用编程中的应用 Windows应应用用程程序序的的运运行行是是依依靠靠事事件件来来驱驱动动,利利用用一一个个while循循环环实实现现不不断断等等待待,如如果果有有事事件件发发生生,操操作作系系统统会会以以消消息息的的形形式式传传递递给给应应用用程程序序,应应用用程程序序会会捕捕获获相相应应的的消消息息,然然后后通通过过调调用相应的函数响应消息。用相应的函数响应消息。7.1.3 Windows应用程序中的常见消息 消消息息在在Windows程程序序设设计计中中是是很很关关键键的的因因素素,在在API程程序序设设计计方方法法中中要要求求熟熟练练记记忆忆常常见见消消息息,但但是是在在MFC程程序序设设计计方方法法中中只只要要求求了了解解这这些些消消息息的的相相关关含含义义即即可。可。1鼠标消息鼠标消息 2键盘消息键盘消息 3关闭窗口消息关闭窗口消息 4退出程序消息退出程序消息 5重画消息重画消息 7.2 API及应用程序基本框架及应用程序基本框架7.2.1 Windows API应用程序实例 共共有有上上千千个个标标准准的的API函函数数,调调用用方方法法与与调调用用C语语言言库库函数类似函数类似示例:示例:#include windows.hint APIENTRY WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance ,LPSTR lpCmdLine ,int nCmdShow)MessageBox(NULL,简单的简单的Windows应用程序!应用程序!,API函数示例函数示例,MB_OK);return 0;注意:注意:不是典型的Windows应用程序,典型WinMain具有固定结构,完成三个任务:注册窗口类、创建并初始化窗口、创建消息循环注册窗口类、创建并初始化窗口、创建消息循环7.2.2 Windows API应用程序结构分析 Windows应用程序具有相对固定的基本结构,其中由入口函数WinMain和窗口函数构成基本框架,并包含各种数据类型、数据结构与函数等。1WinMain函数 WinMain函数是所有Windows应用程序的入口,类似于C语言中的main函数,其功能是完成一系列的定义和初始化工作,并产生消息循环。WinMain函数有三个基本的组成部分:函数说明、初始化和消息循环。2窗口函数 窗口函数是应用程序处理接收到的消息的函数,其中包含了应用程序对各种可能接收到的消息的处理过程。7.3 MFC及应用程序框架及应用程序框架 7.3.1 MFC概述 微软基础类库(MFC)是微软为Windows程序员提供的一个面向对象的Windows编程接口,它封装了大部分Windows API函 数,大 大 简 化 了 Windows编 程 工 作。Microsoft公司的MFC具有以下特点:1完全支持所有的Windows函数、控制、消息、GDI(图形设备接口)基本图形函数、菜单以及对话框。2使用与传统的Windows API同样的命名规则,因此,一个类所能完成的工作可直接从名字得知。3不使用容易产生错误的switch/case语句。4通过发送有关对象信息到文件的能力,来提供更好的判断支持。也可以确认成员变量。5代码少,速度快,容错处理能力强。6在运行时确定数据对象的设计。7.3.2 应用程序框架在Visual C+中,可以创建以下3类典型的Windows 应用程序,它们都是通过MFC AppWizard(exe)(以下简称 AppWizard)向导创建的:(1)基于对话框的应用程序:这类程序适合于文档较少而交互操作较多的应用场合,如Windows自带的计算器程序。(2)单文档界面(SDI)应用程序:这类程序一次只能打开一个文档,如Windows自带的记事本程序。(3)多文档界面(MDI)应用程序:这类程序可以同时打开多个文档并进行处理,处理的过程中很容易地进行切换,如Microsoft Word。7.4 对话框与常用控件对话框与常用控件 对话框是Windows应用程序中最重要的用户界面元素之一,是与用户交互的重要手段。在Visual C+中,对话框既可以单独组成一个简单的应用程序,又可以成为文档/视图结构程序的资源。7.4.1创建对话框程序的步骤 1建立基于对话框的MFC应用程序框架 2放置控件,设置属性,完成对话框窗口界面设计 3为控件连接变量,即为控件命名。4添加并且编写消息处理函数。5编译、链接并运行应用程序 由于对话框的代码是以类为模块来设计的,使用时需要在程序中加入该类的头文件,并定义一个类对象,然后就可以直接使用该类的相关成员。使用的步骤如下:1利用项目工作区ClassView打开相应的.cpp文件,在该源文件的前面加上对话框类的头文件。假设我们为对话框定义的类名为CMyDlg,则需在源文件的前面加上:#include“MyDlg.h”/注意头文件前比类名少个大写的C 2在需要调用的位置添加下列代码:CMyDlg dlg;/定义对话框对象 dlg.DoModal();/显示对话框7.4.2对话框的调用 为了方便用户的程序开发,Visual C+提供了一些通用对话框和消息对话框供用户使用。1通用对话框 Windows提供了一组标准用户界面的对话框,它们都有相应的MFC库中的类来支持。用来操作这些通用对话框的类就是CCommonDialog类,它从Cdialog类中派生,用户可以与使用其他对话框一样使用通用对话框。2消息对话框 消息对话框是最简单的一种对话框,它只是用于显示信息。在Visual C+6.0的MFC类库中就提供相应的函数实现这样的功能,使用时,只要在用户程序任何地方调用它们即可。它们的函数原型如下:7.4.3通用对话框与消息对话框 int AfxMessageBox(LPCTSTR lpszText,UINT nType=MB_OK,UINT nIDHelp=0);int MessageBox(LPCTSTR lpszText,LPCTSTR lpszCaption=NULL,UINT nType=MB_OK);这两个函数都是用于创建和显示消息对话框的,只不过AfxMessageBox是全程函数,可用在任何地方。而MessageBox只能用于控件、对话框、窗口等一些窗口类中。例如:int n=MessageBox(输 入 成 绩?,系 统 提 示,MB_YESNO|MB_ICONQUESTION);if(n=IDYES)1控件添加的方法 2控件的选取 3控件的移动、复制与删除 4设定控件的Tab键次序 5控件的布局 6常用控件的控件通知消息 选择指针静态文本控件组框复选框组合框水平滚动条旋转滑块列表控件Tab控件超文本控件月历自定义控件图像编辑框按钮单选按钮列表框垂直滚动条进度条热键树状控件动画日期时间选择IP地址扩展组合框图7.13 控件工具栏上下左右对齐水平或垂直方向均匀分布切换栅格或向导上下或左右居中使控件具有相同的宽度或大小测试对话框图7.15 控件布局工具栏7.4.4 控件基本操作7.4.5 CString 类 对字符串的存取及有关操作,还可通过标准对字符串的存取及有关操作,还可通过标准C+里的字里的字符串类符串类string(定义在(定义在string.h头文件中)和头文件中)和MFC中的中的CString类(定义在类(定义在afx.h头文件中)。头文件中)。string string是一种用户自定义的数据类型,它由是一种用户自定义的数据类型,它由是一种用户自定义的数据类型,它由是一种用户自定义的数据类型,它由C+C+标准库标准库标准库标准库来支持,而不是来支持,而不是来支持,而不是来支持,而不是C+C+语言本身的一部分。在使用语言本身的一部分。在使用语言本身的一部分。在使用语言本身的一部分。在使用stringstring数据数据数据数据类型之前,需要在程序中包含头文件类型之前,需要在程序中包含头文件类型之前,需要在程序中包含头文件类型之前,需要在程序中包含头文件stringstring并声明其所在的并声明其所在的并声明其所在的并声明其所在的名字空间名字空间名字空间名字空间stdstd,如:,如:,如:,如:#include#include using namespace std;using namespace std;然后在程序中即可定义然后在程序中即可定义然后在程序中即可定义然后在程序中即可定义stringstring类型的变量。如:类型的变量。如:类型的变量。如:类型的变量。如:string name=string name=张三张三张三张三;下面主要介绍下面主要介绍下面主要介绍下面主要介绍MFCMFC中中中中CStringCString类的使用。类的使用。类的使用。类的使用。当要使用当要使用当要使用当要使用MFCMFC中的中的中的中的CString CString 类时,首先必须选择类时,首先必须选择类时,首先必须选择类时,首先必须选择“工工工工程程程程设置设置设置设置”命令,在命令,在命令,在命令,在“Microsoft Foundation Class”“Microsoft Foundation Class”选择除选择除选择除选择除“Not Using MFC”“Not Using MFC”以外的项目。然后源程序的头文件加上:以外的项目。然后源程序的头文件加上:以外的项目。然后源程序的头文件加上:以外的项目。然后源程序的头文件加上:#include#include afx.hafx.h形式:形式:CString 对象名;对象名;CString 对象名对象名=字符串常量字符串常量;CString 对象名对象名(字符串常量字符串常量);CString 对象名对象名(字符字符,int n);/重复产生重复产生n个相同的字符个相同的字符例如:例如:CString s1=C+程序设计程序设计;CString s(d,5);cout、=、=、!=关系运算关系运算st1=”ASDF”st1st3false true 取取指指定定位位置置的的字字符符将将CString对象看成数组对象看成数组st10st13A/第一个字符位置为第一个字符位置为0F2.基本运算基本运算形式:形式:函数值类型函数值类型 CString对象对象.成员函数名成员函数名(参数列表参数列表)(1)取子串)取子串形式:形式:CString Mid(int nFirst,int nCount)/取字符串中取字符串中nFirst位置开始的位置开始的nCount个字符个字符CString Left(int nCount)/取字符串的左边取字符串的左边nCount个字符个字符CString Right(int nCount)/取字符串的右边取字符串的右边nCount个字符个字符有定义:有定义:有定义:有定义:CString s(CString s(1234512345););则:则:则:则:s.Mid(2,2)s.Mid(2,2)的值为的值为的值为的值为3434 s.Left(3)s.Left(3)的值为的值为的值为的值为1231233.成员成员函数函数(2)查看字符串信息)查看字符串信息int Find(TCHAR ch);int Find(TCHAR ch);/返回指定字符在串中的位置返回指定字符在串中的位置返回指定字符在串中的位置返回指定字符在串中的位置int Find(LPCTSTR lpszSub);int Find(LPCTSTR lpszSub);/返回指定子串在串中的位置返回指定子串在串中的位置返回指定子串在串中的位置返回指定子串在串中的位置int GetLength();int GetLength();/返回字符串的字符数返回字符串的字符数返回字符串的字符数返回字符串的字符数(3)字符串修改)字符串修改 void SetAt(int nIndex,TCHAR ch)void SetAt(int nIndex,TCHAR ch)/用字符替换指定位置上的字符用字符替换指定位置上的字符用字符替换指定位置上的字符用字符替换指定位置上的字符 int Insert(int nIndex,TCHAR ch)int Insert(int nIndex,TCHAR ch)/将字符插入到指定位置,原位置的字符右移将字符插入到指定位置,原位置的字符右移将字符插入到指定位置,原位置的字符右移将字符插入到指定位置,原位置的字符右移 int Delete(int nIndex,int nCount=1)int Delete(int nIndex,int nCount=1)/从指定位置开始删除一个或多个字符从指定位置开始删除一个或多个字符从指定位置开始删除一个或多个字符从指定位置开始删除一个或多个字符 int Replace(TCHAR chOld,TCHAR chNew)int Replace(TCHAR chOld,TCHAR chNew)/将新字符替换字符串中的老字符将新字符替换字符串中的老字符将新字符替换字符串中的老字符将新字符替换字符串中的老字符 int Replace(LPCTSTR lpszOld,LPCTSTR lpszNew)int Replace(LPCTSTR lpszOld,LPCTSTR lpszNew)/同上,区别替换的是子字符串同上,区别替换的是子字符串同上,区别替换的是子字符串同上,区别替换的是子字符串(4)转换字符串转换字符串 void MakeUpper()void MakeUpper()/将字符串中的所有字符转换成大写将字符串中的所有字符转换成大写将字符串中的所有字符转换成大写将字符串中的所有字符转换成大写 void MakeLower()void MakeLower()/将字符串中的所有字符转换成小写将字符串中的所有字符转换成小写将字符串中的所有字符转换成小写将字符串中的所有字符转换成小写 void MakeReverse()void MakeReverse()/将字符串中各字符的顺序倒转将字符串中各字符的顺序倒转将字符串中各字符的顺序倒转将字符串中各字符的顺序倒转 void Empty()void Empty()/将字符串中的所有字符删除将字符串中的所有字符删除将字符串中的所有字符删除将字符串中的所有字符删除(5)格式化输出)格式化输出形式:形式:形式:形式:viod Format(viod Format(格式字符串,输出参数列表格式字符串,输出参数列表格式字符串,输出参数列表格式字符串,输出参数列表);功能:功能:功能:功能:构造一个输出的字符串。构造一个输出的字符串。构造一个输出的字符串。构造一个输出的字符串。其中:其中:其中:其中:11)“格格格格式式式式字字字字符符符符串串串串”由由由由输输输输出出出出的的的的文文文文字字字字和和和和数数数数据据据据格格格格式式式式说说说说明明明明符符符符组组组组成成成成,文文文文字字字字可可可可以以以以是是是是直直直直接接接接键键键键入入入入的的的的各各各各种种种种字字字字符符符符,还还还还可可可可以以以以是是是是转转转转义义义义符符符符;数数数数据据据据格格格格式说明符形式:式说明符形式:式说明符形式:式说明符形式:%输出宽度输出宽度输出宽度输出宽度格式字符格式字符格式字符格式字符格式字符说 明d十进制整数十进制整数c输出单个字符输出单个字符s输出字符串输出字符串flff以小数形式输出单精度数以小数形式输出单精度数lf双精度数双精度数22)“输输输输出出出出参参参参数数数数列列列列表表表表”表表表表示示示示要要要要输输输输出出出出的的的的数数数数据据据据,其其其其个个个个数数数数与与与与类类类类型型型型必必必必须与格式说明符依次对应。须与格式说明符依次对应。须与格式说明符依次对应。须与格式说明符依次对应。有定义:有定义:有定义:有定义:CString s;CString s;则:则:则:则:s.Format(a1=%d,a2=%5.2f,a3=%s,123,12.3,abc);s.Format(a1=%d,a2=%5.2f,a3=%s,123,12.3,abc);couts;couts;输出:输出:输出:输出:a1=123,a2=12.30,a3=abca1=123,a2=12.30,a3=abc【例【例7-1】使用使用CString 类对象数组存放若干个字符串,采类对象数组存放若干个字符串,采用选择法排序,实现对字符串数组的排序。用选择法排序,实现对字符串数组的排序。程序:程序:#include iostream.h#include afx.h void main()CString s4=Fortran,C+,Pascal,Visual Basic,t;int i,j,m;for(i=0;i3;i+)/选择选择法排序法排序 m=i;for(j=i+1;j4;j+)if(sjsm)m=j;t=si;si=sm;sm=t;for(i=0;i4;i+)couti siendl;1 1静静态态控控件件:包括静态文本(Static Text)、组框和图片控件(Picture)。7.4.6常用控件与功能函数2 2按钮控件按钮控件 按按按按钮钮钮钮是是是是用用用用于于于于实实实实现现现现一一一一种种种种开开开开与与与与关关关关的的的的输输输输入入入入,常常常常用用用用的的的的有有有有:普普普普通通通通按按按按钮钮钮钮、复复复复选选选选框框框框按按按按钮钮钮钮和和和和单单单单选选选选按按按按钮钮钮钮。MFCMFC的的的的CButtonCButton类类类类封封封封装装装装了了了了按钮控件。按钮控件。按钮控件。按钮控件。普普普普通通通通按按按按钮钮钮钮也也也也称称称称命命命命令令令令按按按按钮钮钮钮,可可可可以以以以立立立立即即即即产产产产生生生生某某某某个个个个动动动动作作作作、执执执执行某个命令,一般不需要连接变量;行某个命令,一般不需要连接变量;行某个命令,一般不需要连接变量;行某个命令,一般不需要连接变量;单单单单选选选选按按按按钮钮钮钮必必必必须须须须成成成成组组组组出出出出现现现现,用用用用户户户户在在在在一一一一组组组组按按按按钮钮钮钮中中中中最最最最多多多多只只只只能能能能选选选选择择择择一一一一项项项项。设设设设计计计计时时时时同同同同一一一一组组组组的的的的按按按按钮钮钮钮必必必必须须须须一一一一个个个个接接接接一一一一个个个个地地地地放放放放进进进进对对对对话话话话框框框框中中中中,中中中中间间间间不不不不能能能能插插插插入入入入其其其其他他他他控控控控件件件件,并并并并且且且且一一一一个个个个组组组组的的的的第第第第一一一一个个个个按按按按钮钮钮钮要要要要选选选选中中中中“GroupGroup”属属属属性性性性,表表表表示示示示一一一一组组组组的的的的开开开开始始始始。一一一一组组组组按按按按钮钮钮钮中中中中只只只只能对第一个按钮连接变量;能对第一个按钮连接变量;能对第一个按钮连接变量;能对第一个按钮连接变量;复复复复选选选选框框框框按按按按钮钮钮钮列列列列出出出出了了了了可可可可供供供供选选选选择择择择的的的的项项项项,用用用用户户户户可可可可根根根根据据据据需需需需要要要要选选选选择择择择其其其其中中中中的的的的一一一一项项项项或或或或多多多多项项项项,各各各各项项项项之之之之间间间间的的的的状状状状态态态态互互互互不不不不相相相相关关关关。复复复复选选选选框框框框通常被连接到通常被连接到通常被连接到通常被连接到ValueValue类别类别类别类别BOOLBOOL类型的变量中。类型的变量中。类型的变量中。类型的变量中。按 钮 控 件 的 消 息 中,常 见 的 只 有 单 击 按 钮BN_CLICKED 和双击按钮BN_DOUBLECLICKED。CButton类的成员函数SetCheck和GetCheck函数原型如下:格式:格式:viod SetCheck(int nCheck);说明:说明:设置复选框的选中状态格式:格式:int GetCheck()const;说明:说明:获取复选框的选中状态 其中,nCheck和GetCheck函数返回的值可以是:0表示不选中,1表示选中,2表示不确定。CWnd类的成员函数CheckRadioButton和GetCheckedRadioButton的原型如下:格格式式:void CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton);说明:说明:设置单选按钮的选中状态格格式式:int GetCheckedRadioButton(int nIDFirstButton,int nIDLastButton);说明:说明:获取单选按钮的选中状态 其中,nIDFirstButton和nIDLastButton分别指定这组单选按钮的第一个和最后一个按钮ID值,nIDCheckButton用于 指 定 要 设 置 选 中 状 态 的 按 钮 ID值,函 数 指 定GetCheckedRadioButton返回选中的按钮ID值。格式:格式:UINT IsDlgButtonChecked(int nIDButton)const;说明:说明:用于判定单选按钮是否被选定,如果ID为nIDButton的按钮被选定,则该函数的返回值为true,否则为false。【例7-2】设计一个如图7.19所示的程序。当单击“结果”按钮后,在消息框中显示选择情况。3编辑框控件编辑框控件 1.1.1.1.重要属性重要属性重要属性重要属性 Multiline Multiline:定义该编辑框为多行文本框。:定义该编辑框为多行文本框。Number Number:限定输入的字符只能是数字字符。:限定输入的字符只能是数字字符。Border Border:为控件创建边界。:为控件创建边界。Read-only Read-only:编辑框成为:编辑框成为只读只读的,禁止用户编辑。的,禁止用户编辑。2.成员函数成员函数 从从CWnd类继承的成员函数类继承的成员函数(1)将编辑框中的内容复制出来)将编辑框中的内容复制出来/复制到CString对象void GetWindowText(CString&rString)const;示例:CString ch;m_e.GetWindowText(ch);/复制到数组int GetWindowText(LPTSTR lpszStringBuf,int nMaxCount)const;示例:char ch80;m_e.GetWindowText(ch,80);(2)设置编辑框中的内容)设置编辑框中的内容void SetWindowText(LPCTSTR lpszString);示例:char ch20=abcdefg;m_e.SetWindowText(ch);3.连接变量连接变量Control:只能是只能是CEdit类型类型Value:CString int double等等注意:注意:注意:注意:若一个编辑框连接了一个若一个编辑框连接了一个若一个编辑框连接了一个若一个编辑框连接了一个ValueValue类别的变量,则该变类别的变量,则该变类别的变量,则该变类别的变量,则该变量就表示这个编辑框,编辑框中显示的内容就是变量的量就表示这个编辑框,编辑框中显示的内容就是变量的量就表示这个编辑框,编辑框中显示的内容就是变量的量就表示这个编辑框,编辑框中显示的内容就是变量的值。但是,改变了编辑框的内容并不会自动更新对应的值。但是,改变了编辑框的内容并不会自动更新对应的值。但是,改变了编辑框的内容并不会自动更新对应的值。但是,改变了编辑框的内容并不会自动更新对应的变量的值,同样,改变了变量的值也不会自动刷新编辑变量的值,同样,改变了变量的值也不会自动刷新编辑变量的值,同样,改变了变量的值也不会自动刷新编辑变量的值,同样,改变了变量的值也不会自动刷新编辑框的内容。若编辑框的内容改变了,则应使用语句框的内容。若编辑框的内容改变了,则应使用语句框的内容。若编辑框的内容改变了,则应使用语句框的内容。若编辑框的内容改变了,则应使用语句UpdateData(TRUE);UpdateData(TRUE);更新对应的变量的值;若变量的值更新对应的变量的值;若变量的值更新对应的变量的值;若变量的值更新对应的变量的值;若变量的值改变了,则应使用语句改变了,则应使用语句改变了,则应使用语句改变了,则应使用语句UpdateData(FALSE);UpdateData(FALSE);刷新编辑框刷新编辑框刷新编辑框刷新编辑框的内容。的内容。的内容。的内容。void CTESTDlg:OnCalc()UpdateData(TRUE);double a=m_a;double b=m_b;double c=m_c;m_x1=(-b+sqrt(b*b-4*a*c)/(2*a);m_x2=(-b-sqrt(b*b-4*a*c)/(2*a);UpdateData(FALSE);【例【例7.2】输入一元二次方程输入一元二次方程ax2+bx+c=0的系数的系数a、b、c,计算并输出两个根计算并输出两个根x1、x2 m_x1(double)m_x2(double)m_a(double)m_b(double)m_c(double)void CTESTDlg:OnOk()OnOK();ID:OkID:Calc示范操作示范操作【例7-3】使用静态文本框、组框、编辑框以及按钮等控件设计一个如图7.20所示的程序。当用户在语文、数学、英语编辑框输入成绩后,单击“计算平均分”按钮后,将显示这三门课的平均成绩。(1 1)属性设置)属性设置Selection:选择方式Single 单项选择Multiple 多项选择,但是忽略Ctrl和Alt键。Extended 允许使用Ctrl和Alt进行多项选择None 禁止选择Sort:排序(2 2)成员函数)成员函数 添加:添加:int AddString(LPCTSTR lpszItem);示列:示列:m_l.AddString(“大学计算机基础大学计算机基础);4列表框控件列表框控件 删除:删除:int DeleteString(UINT nIndex);示例:示例:m_l.DeleteString(4);/删除第删除第5个个 说明:说明:下标从下标从0开始开始 获取当前选定项目的序号获取当前选定项目的序号 int DeleteString(UINT nIndex);格式:格式:int GetCurSel()const;示例:示例:int i=m_l.GetCurSel();获取指定项目获取指定项目 int GetText(int nIndex,LPTSTR lpszBuffer)const;void GetText(int nIndex,CString&rString)const;示例:示例:char s120;CString s2;,m_l.GetText(4,s1);/读入数组读入数组 m_l.GetText(4,s2);/读入读入CString对象对象【例7-4】编写一个如图所示的能对列表框进行项目添加、修改和删除操作的应用程序。“添加”按钮的功能是将文本框中的内容添加到列表框,“删除”按钮的功能是删除列表框中选定的选项。如果要修改列表框,则首先选定选项,然后单击“修改”按钮,所选的选项显示在文本框中,当在文本框中修改完之后再单击“修改确定”按钮更新列表框。5组合框控件组合框控件 Ctrl+Enter键(1)属性设置(2)成员函数成员函数 编辑框和列表框的成员函数编辑框和列表框的成员函数 GetText()不能用不能用 int GetLBText(int nIndex,LPTSTR lpszText)const;void GetLBText(int nIndex,CString&rString)const;(3)组合框发出的消息组合框发出的消息 CBN_SELECTCHANGE:选项改变:选项改变 CBN_EDITCHANGE:编辑框中文本改变:编辑框中文本改变【例7-5】设计一个如图7.23所示的对话框。如果单击“确定”按钮,则用MessageBox显示所设置的信息。6 6滚动条控件滚动条控件 滚滚滚滚动动动动条条条条是是是是CScrollBarCScrollBarCScrollBarCScrollBar类类类类的的的的对对对对象象象象,是是是是WindowsWindowsWindowsWindows应应应应用用用用程程程程序序序序中中中中一一一一个个个个很很很很重重重重要要要要的的的的控控控控件件件件,通通通通常常常常附附附附在在在在对对对对话话话话框框框框上上上上用用用用来来来来协协协协助助助助观观观观察察察察数数数数据据据据或或或或确确确确定定定定位位位位置置置置,也也也也可可可可以以以以用用用用来来来来作作作作为为为为数数数数据据据据输输输输入入入入的的的的工工工工具具具具。滚滚滚滚动动动动条条条条有有有有水水水水平平平平和和和和垂直两种。垂直两种。垂直两种。垂直两种。主要成员函数的原型如下:主要成员函数的原型如下:主要成员函数的原型如下:主要成员函数的原型如下:(11)设置最大值和最小值)设置最大值和最小值)设置最大值和最小值)设置最大值和最小值 void SetScrollRange(int nMinPos,int nMaxPos,BOOL bRedraw=TRUE);void SetScrollRange(int nMinPos,int nMaxPos,BOOL bRedraw=TRUE);最小值最小值 最大值最大值 TRUE TRUE时重画时重画(22)设置滑块的位置)设置滑块的位置)设置滑块的位置)设置滑块的位置 int SetScrollPos(int nPos,BOOL bRedraw=TRUE);int SetScrollPos(int nPos,BOOL bRedraw=TRUE);滑块的位置滑块的位置滑块的位置滑块的位置 TRUE TRUE时重画时重画时重画时重画 滚动条没有消息,但对话框却能接收到WM_HScroll(WM_Vscroll)void CTESTDlg:OnHScroll(UINT nSBCode,UINT nPos,CScrollBar*pScrollBar)/TODO:Add your message handler code here and/or call default CDialog:OnHScroll(nSBCode,nPos,pScrollBar);pScrollBar:指向用户正在操作的滚动条。nPos:滑块当前位置。nSBCode:用户正在进行的操作7进度条控件进度条控件 进进度度条条除除了了能能表表示示一一个个过过程程的的进进展展情情况况外外,使使用用进进度度条还可以表明温度、水平面或类似的测量值。条还可以表明温度、水平面或类似的测量值。进进度度条条的的风风格格属属性性有有:进进度度条条是是否否有有边边框框、水水平平(默默认)还是垂直、用块还是平滑填充进度条。认)还是垂直、用块还是平滑填充进度条。对对进进度度条条的的操操作作都都是是通通过过相相关关的的CProgressCtrlCProgressCtrl类类成成员员函数来实现的。函数来实现的。形式:形式:形式:形式:int SetPos(int nPos);int SetPos(int nPos);说明:说明:说明:说明:设置进度条的当前位置。设置进度条的当前位置。形式:形式:形式:形式:int GetPos();int GetPos();说明:说明:说明:说明:获取进度条的当前位置。获取进度条的当前位置。形式:形式:形式:形式:int SetStep(int nStep);int SetStep(int nStep);说明:说明:说明:说明:获取进度条的当前位置。获取进度条的当前位置。8旋转按钮控件旋转按钮控件 旋转