可视化编程基础课件_第1页
可视化编程基础课件_第2页
可视化编程基础课件_第3页
可视化编程基础课件_第4页
可视化编程基础课件_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章VisualC++可视化编程基础7.1Windows程序设计概述7.2API及应用程序基本框架7.3MFC及应用程序框架7.4对话框与常用控件7.5菜单、工具栏与状态栏设计7.6文档/视图结构应用程序7.7程序举例第7章VisualC++可视化编程基础7.1Windo1第7章VisualC++可视化编程基础7.1Windo7.1.1基于VisualC++的Windows应用程序设计方法

7.1Windows程序设计概述用VisualC++编写Windows应用程序主要有两种方法:

1.ApplicationProgrammingInterface——APIAPI是Windows系统和Windows应用程序间的标准程序接口,应用程序可以通过此接口访问系统。凡是在Windows工作环境下执行的应用程序都可以通过调用API函数来实现各种功能的操作。在Windows程序设计的初期,程序员所能做使用的编程工具就只有使用API函数,通过API函数的调用组合,就可以搭建出各种界面丰富、功能灵活的应用程序。

2.MicrosoftFoundationClass——MFCMFC是VisualC++的核心,是Microsoft公司提供的用来编写Windows应用程序的C++类库,集成了大量已经预先定义好的类,大约有200多个,用户可以根据编程的需要调用相应的类或自定义有关的类。这些类可以分成两种:一是CObject类的派生类;二是非CObject派生类,如表示点的CPoint类,表示矩形的CRect类等。7.1.1基于VisualC++的Windows应用程序设27.1.1基于VisualC++的Windows应用程序设可视化编程基础课件3可视化编程基础课件37.1.2Windows程序设计的基本概念

Windows应用程序的特点:具有标准的图形用户界面。具有与硬件无关的特性。采用“消息传递,事件驱动”的运行机制。1.窗口与对象

窗口是应用程序与用户之间交互的接口环境。用户可以通过窗口输入数据,控制应用程序的运行;应用程序可以通过窗口显示数据和运行状态。对象是指Windows的规范部件,包括各种窗口、菜单、按钮、对话框以及程序模块等。2.常用Windows数据类型

Windows应用程序的源程序中包含种类繁多的数据类型,其中windows.h是用户调用系统功能的关键,文件中定义了Windows系统使用的数据类型。

7.1.2Windows程序设计的基本概念Windows47.1.2Windows程序设计的基本概念Windows3.句柄

句柄是指系统创建对象后返回的用来代表该对象的一个唯一的4字节长整数值,是整个Windows编程的基础,用于标识应用程序中不同的对象和同类对象中不同的实例。例如,一个窗口、按钮、图标、滚动条、输出设备、控件或者文件等。应用程序通过句柄能够访问相应的对象信息,它代表对对象的引用。

4.事件驱动

Windows应用程序以消息为基础,以事件驱动之。Windows应用程序启动之后将进入一个消息循环,等待系统或应用程序的消息,消息的产生是因为事件发生的结果,Windows程序设计主要围绕编写事件或消息的响应函数上。

5.消息及其在Windows编程中的应用

Windows应用程序的运行是依靠事件来驱动,利用一个while循环实现不断等待,如果有事件发生,操作系统会以消息的形式传递给应用程序,应用程序会捕获相应的消息,然后通过调用相应的函数响应消息。3.句柄53.句柄3.句柄57.1.3Windows应用程序中的常见消息消息在Windows程序设计中是很关键的因素,在API程序设计方法中要求熟练记忆常见消息,但是在MFC程序设计方法中只要求了解这些消息的相关含义即可。1.鼠标消息2.键盘消息3.关闭窗口消息4.退出程序消息5.重画消息7.1.3Windows应用程序中的常见消息67.1.3Windows应用程序中的常见消息7.2API及应用程序基本框架7.2.1WindowsAPI应用程序实例

共有上千个标准的API函数,调用方法与调用C语言库函数类似示例:#include"windows.h"intAPIENTRYWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){MessageBox(NULL,"简单的Windows应用程序!","API函数示例",MB_OK);return0;}7.2API及应用程序基本框架7.2.1Windows77.2API及应用程序基本框架7.2.1Windows注意:不是典型的Windows应用程序,典型WinMain具有固定结构,完成三个任务:

注册窗口类、创建并初始化窗口、创建消息循环注意:不是典型的Windows应用程序,典型WinMain具8注意:不是典型的Windows应用程序,典型WinMain具7.2.2WindowsAPI应用程序结构分析Windows应用程序具有相对固定的基本结构,其中由入口函数WinMain和窗口函数构成基本框架,并包含各种数据类型、数据结构与函数等。1.WinMain函数WinMain函数是所有Windows应用程序的入口,类似于C语言中的main函数,其功能是完成一系列的定义和初始化工作,并产生消息循环。WinMain函数有三个基本的组成部分:函数说明、初始化和消息循环。2.窗口函数窗口函数是应用程序处理接收到的消息的函数,其中包含了应用程序对各种可能接收到的消息的处理过程。7.2.2WindowsAPI应用程序结构分析97.2.2WindowsAPI应用程序结构分析7.3MFC及应用程序框架

7.3.1MFC概述微软基础类库(MFC)是微软为Windows程序员提供的一个面向对象的Windows编程接口,它封装了大部分WindowsAPI函数,大大简化了Windows编程工作。Microsoft公司的MFC具有以下特点:1.完全支持所有的Windows函数、控制、消息、GDI(图形设备接口)基本图形函数、菜单以及对话框。2.使用与传统的WindowsAPI同样的命名规则,因此,一个类所能完成的工作可直接从名字得知。3.不使用容易产生错误的switch/case语句。4.通过发送有关对象信息到文件的能力,来提供更好的判断支持。也可以确认成员变量。5.代码少,速度快,容错处理能力强。6.在运行时确定数据对象的设计。7.3MFC及应用程序框架7.3.1MFC概述107.3MFC及应用程序框架7.3.1MFC概述7.37.3.2应用程序框架在VisualC++中,可以创建以下3类典型的Windows应用程序,它们都是通过MFCAppWizard(exe)(以下简称AppWizard)向导创建的:

(1)基于对话框的应用程序:这类程序适合于文档较少而交互操作较多的应用场合,如Windows自带的计算器程序。

(2)单文档界面(SDI)应用程序:这类程序一次只能打开一个文档,如Windows自带的记事本程序。

(3)多文档界面(MDI)应用程序:这类程序可以同时打开多个文档并进行处理,处理的过程中很容易地进行切换,如MicrosoftWord。7.3.2应用程序框架117.3.2应用程序框架7.3.2应用程序框架117.4对话框与常用控件对话框是Windows应用程序中最重要的用户界面元素之一,是与用户交互的重要手段。在VisualC++中,对话框既可以单独组成一个简单的应用程序,又可以成为文档/视图结构程序的资源。

7.4.1创建对话框程序的步骤1.建立基于对话框的MFC应用程序框架2.放置控件,设置属性,完成对话框窗口界面设计3.为控件连接变量,即为控件命名。4.添加并且编写消息处理函数。5.编译、链接并运行应用程序7.4对话框与常用控件对话框是Windows应127.4对话框与常用控件对话框是Windows应可视化编程基础课件13可视化编程基础课件13由于对话框的代码是以类为模块来设计的,使用时需要在程序中加入该类的头文件,并定义一个类对象,然后就可以直接使用该类的相关成员。使用的步骤如下:1.利用项目工作区ClassView打开相应的.cpp文件,在该源文件的前面加上对话框类的头文件。

假设我们为对话框定义的类名为CMyDlg,则需在源文件的前面加上:#include“MyDlg.h”//注意头文件前比类名少个大写的C2.在需要调用的位置添加下列代码:

CMyDlgdlg;//定义对话框对象

dlg.DoModal();//显示对话框7.4.2对话框的调用由于对话框的代码是以类为模块来设计的,使用时14由于对话框的代码是以类为模块来设计的,使用时为了方便用户的程序开发,VisualC++提供了一些通用对话框和消息对话框供用户使用。1.通用对话框Windows提供了一组标准用户界面的对话框,它们都有相应的MFC库中的类来支持。用来操作这些通用对话框的类就是CCommonDialog类,它从Cdialog类中派生,用户可以与使用其他对话框一样使用通用对话框。2.消息对话框消息对话框是最简单的一种对话框,它只是用于显示信息。在VisualC++6.0的MFC类库中就提供相应的函数实现这样的功能,使用时,只要在用户程序任何地方调用它们即可。它们的函数原型如下:7.4.3通用对话框与消息对话框为了方便用户的程序开发,VisualC++15为了方便用户的程序开发,VisualC++

intAfxMessageBox(LPCTSTRlpszText,UINTnType=MB_OK,UINTnIDHelp=0);intMessageBox(LPCTSTRlpszText,LPCTSTRlpszCaption=NULL,UINTnType=MB_OK);这两个函数都是用于创建和显示消息对话框的,只不过AfxMessageBox是全程函数,可用在任何地方。而MessageBox只能用于控件、对话框、窗口等一些窗口类中。例如:intn=MessageBox("输入成绩?","系统提示",MB_YESNO|MB_ICONQUESTION);if(n==IDYES) {……}intAfxMessageBox(LPCT16intAfxMessageBox(LPCT1.控件添加的方法

2.控件的选取

3.控件的移动、复制与删除

4.设定控件的Tab键次序

5.控件的布局

6.常用控件的控件通知消息

选择指针静态文本控件组框复选框组合框水平滚动条旋转滑块列表控件Tab控件超文本控件月历自定义控件图像编辑框按钮单选按钮列表框垂直滚动条进度条热键树状控件动画日期时间选择IP地址扩展组合框图7.13控件工具栏上下左右对齐水平或垂直方向均匀分布切换栅格或向导上下或左右居中使控件具有相同的宽度或大小测试对话框图7.15控件布局工具栏7.4.4控件基本操作1.控件添加的方法选择指针静态文本控件组框复选框组合框水平171.控件添加的方法选择指针静态文本控件组框复选框组合框水平7.4.5CString类对字符串的存取及有关操作,还可通过标准C++里的字符串类string(定义在string.h头文件中)和MFC中的CString类(定义在afx.h头文件中)。string是一种用户自定义的数据类型,它由C++标准库来支持,而不是C++语言本身的一部分。在使用string数据类型之前,需要在程序中包含头文件string并声明其所在的名字空间std,如:#include<string>usingnamespacestd;然后在程序中即可定义string类型的变量。如:

stringname="张三";下面主要介绍MFC中CString类的使用。7.4.5CString类对字符串的存187.4.5CString类对字符串的存当要使用MFC中的CString类时,首先必须选择“工程→设置”命令,在“MicrosoftFoundationClass”选择除“NotUsingMFC”以外的项目。然后源程序的头文件加上:#include"afx.h"形式:CString对象名;CString对象名="字符串常量";

CString对象名("字符串常量");

CString对象名('字符',intn);

//重复产生n个相同的字符例如:CStrings1="C++程序设计";

CStrings('d',5);cout<<s;//s获得字符串”ddddd”1.定义CString类对象当要使用MFC中的CString类时,首先必19当要使用MFC中的CString类时,首先必CString类的特色之一是可将一些常用运算符直接作用用于其对象。假设已有如下定义的CString对象:CStringst1("ASDFG"),st2,st3("DD");运算符含义实例结果=赋值st2=”C++程序设计”;st3=st1;st2的值为”C++程序设计”st3的值为”ASDFG”+字符串连接st2=st2+”教程”st2的值为”C++程序设计教程”+=字符串连接并赋值st2+=”教程”在st2相同初值的基础上效果同上>、<、==、>=、<=、!=关系运算st1==”ASDF”st1<st3falsetrue[]取指定位置的字符将CString对象看成数组st1[0]st1[3]‘A’//第一个字符位置为0‘F’2.基本运算CString类的特色之一是可将一些常用运算符直接20CString类的特色之一是可将一些常用运算符直接形式:

函数值类型CString对象.成员函数名(参数列表)(1)取子串形式:CStringMid(intnFirst,intnCount)

//取字符串中nFirst位置开始的nCount个字符CStringLeft(intnCount)//取字符串的左边nCount个字符CStringRight(intnCount)//取字符串的右边nCount个字符有定义:CStrings("12345");则:s.Mid(2,2)的值为34s.Left(3)的值为1233.成员函数形式:有定义:CStrings("12345");3.21形式:有定义:CStrings("12345");3.(2)查看字符串信息intFind(TCHARch);//返回指定字符在串中的位置intFind(LPCTSTRlpszSub);//返回指定子串在串中的位置intGetLength();//返回字符串的字符数(3)字符串修改

voidSetAt(intnIndex,TCHARch)

//用字符替换指定位置上的字符intInsert(intnIndex,TCHARch)

//将字符插入到指定位置,原位置的字符右移intDelete(intnIndex,intnCount=1)

//从指定位置开始删除一个或多个字符intReplace(TCHARchOld,TCHARchNew)

//将新字符替换字符串中的老字符intReplace(LPCTSTRlpszOld,LPCTSTRlpszNew)

//同上,区别替换的是子字符串(2)查看字符串信息intFind(TCHARch);22(2)查看字符串信息intFind(TCHARch);(4)转换字符串

voidMakeUpper()//将字符串中的所有字符转换成大写

voidMakeLower()//将字符串中的所有字符转换成小写

voidMakeReverse()//将字符串中各字符的顺序倒转voidEmpty()//将字符串中的所有字符删除(5)格式化输出形式:viodFormat(格式字符串,输出参数列表);功能:构造一个输出的字符串。其中:1)“格式字符串”由输出的文字和数据格式说明符组成,文字可以是直接键入的各种字符,还可以是转义符;数据格式说明符形式:%[输出宽度]格式字符(4)转换字符串voidMakeUpper()23(4)转换字符串voidMakeUpper()格式字符说明d十进制整数c输出单个字符s输出字符串flff以小数形式输出单精度数lf双精度数2)“输出参数列表”表示要输出的数据,其个数与类型必须与格式说明符依次对应。有定义:CStrings;则:s.Format("a1=%d,a2=%5.2f,a3=%s",123,12.3,"abc");cout<<s;输出:a1=123,a2=12.30,a3=abc格式字符说明d十进制整数c输出单个字符s输出字符串f24格式字符说明d十进制整数c输出单个字符s输出字符串f【例7-1】使用CString类对象数组存放若干个字符串,采用选择法排序,实现对字符串数组的排序。程序:#include

"iostream.h"

#include"afx.h"voidmain(){CStrings[4]={"Fortran","C++","Pascal","VisualBasic"},t;inti,j,m;for(i=0;i<3;i++)//选择法排序

{m=i;

for(j=i+1;j<4;j++) if(s[j]<s[m])m=j;t=s[i];s[i]=s[m];s[m]=t;}for(i=0;i<4;i++)cout<<i<<""<<s[i]<<endl; }【例7-1】使用CString类对象数组存放若干个字符串,25【例7-1】使用CString类对象数组存放若干个字符串,1.静态控件:包括静态文本(StaticText)、组框和图片控件(Picture)。

7.4.6常用控件与功能函数1.静态控件:包括静态文本(StaticText)、组框和261.静态控件:包括静态文本(StaticText)、组框和2.按钮控件

按钮是用于实现一种开与关的输入,常用的有:普通按钮、复选框按钮和单选按钮。MFC的CButton类封装了按钮控件。普通按钮也称命令按钮,可以立即产生某个动作、执行某个命令,一般不需要连接变量;单选按钮必须成组出现,用户在一组按钮中最多只能选择一项。设计时同一组的按钮必须一个接一个地放进对话框中,中间不能插入其他控件,并且一个组的第一个按钮要选中“Group”属性,表示一组的开始。一组按钮中只能对第一个按钮连接变量;复选框按钮列出了可供选择的项,用户可根据需要选择其中的一项或多项,各项之间的状态互不相关。复选框通常被连接到Value类别BOOL类型的变量中。2.按钮控件按钮是用于实现一种开与关的272.按钮控件按钮是用于实现一种开与关的按钮控件的消息中,常见的只有单击按钮BN_CLICKED和双击按钮BN_DOUBLECLICKED。CButton类的成员函数SetCheck和GetCheck函数原型如下:格式:viodSetCheck(intnCheck);说明:设置复选框的选中状态格式:intGetCheck()const;说明:获取复选框的选中状态其中,nCheck和GetCheck函数返回的值可以是:0表示不选中,1表示选中,2表示不确定。

CWnd类的成员函数CheckRadioButton和GetCheckedRadioButton的原型如下:格式:voidCheckRadioButton(intnIDFirstButton,intnIDLastButton,intnIDCheckButton);说明:设置单选按钮的选中状态按钮控件的消息中,常见的只有单击按钮BN_CL28按钮控件的消息中,常见的只有单击按钮BN_CL格式:intGetCheckedRadioButton(intnIDFirstButton,intnIDLastButton);说明:获取单选按钮的选中状态其中,nIDFirstButton和nIDLastButton分别指定这组单选按钮的第一个和最后一个按钮ID值,nIDCheckButton用于指定要设置选中状态的按钮ID值,函数指定GetCheckedRadioButton返回选中的按钮ID值。格式:UINTIsDlgButtonChecked(intnIDButton)const;说明:用于判定单选按钮是否被选定,如果ID为nIDButton的按钮被选定,则该函数的返回值为true,否则为false。格式:intGetCheckedRadioButton(i29格式:intGetCheckedRadioButton(i【例7-2】设计一个如图7.19所示的程序。当单击“结果”按钮后,在消息框中显示选择情况。

【例7-2】设计一个如图7.19所示的程序。当单击“结果”按30【例7-2】设计一个如图7.19所示的程序。当单击“结果”按3.编辑框控件

1.重要属性Multiline:定义该编辑框为多行文本框。Number:限定输入的字符只能是数字字符。Border:为控件创建边界。Read-only:编辑框成为只读的,禁止用户编辑。3.编辑框控件1.重要属性313.编辑框控件1.重要属性3.编辑框控件12.成员函数2.成员函数322.成员函数2.成员函数32从CWnd类继承的成员函数(1)将编辑框中的内容复制出来 //复制到CString对象 voidGetWindowText(CString&rString)const; 示例:CStringch; m_e.GetWindowText(ch); //复制到数组 intGetWindowText(LPTSTRlpszStringBuf, intnMaxCount)const; 示例:charch[80]; m_e.GetWindowText(ch,80);(2)设置编辑框中的内容 voidSetWindowText(LPCTSTRlpszString); 示例:charch[20]="abcdefg"; m_e.SetWindowText(ch);从CWnd类继承的成员函数33从CWnd类继承的成员函数从CWnd类继承的成员函数3.连接变量

Control:只能是CEdit类型

Value:CString int double等注意:若一个编辑框连接了一个Value类别的变量,则该变量就表示这个编辑框,编辑框中显示的内容就是变量的值。但是,改变了编辑框的内容并不会自动更新对应的变量的值,同样,改变了变量的值也不会自动刷新编辑框的内容。若编辑框的内容改变了,则应使用语句UpdateData(TRUE);更新对应的变量的值;若变量的值改变了,则应使用语句UpdateData(FALSE);刷新编辑框的内容。3.连接变量注意:343.连接变量注意:3.连接变量注意:34voidCTESTDlg::OnCalc(){UpdateData(TRUE);doublea=m_a;doubleb=m_b;doublec=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、x2m_x1(double)m_x2(double)m_a(double)m_b(double)m_c(double)voidCTESTDlg::OnOk(){OnOK();}ID:OkID:CalcvoidCTESTDlg::OnCalc()【例7.2】35voidCTESTDlg::OnCalc()【例7.2】示范操作示范操作36示范操作示范操作36【例7-3】使用静态文本框、组框、编辑框以及按钮等控件设计一个如图7.20所示的程序。当用户在语文、数学、英语编辑框输入成绩后,单击“计算平均分”按钮后,将显示这三门课的平均成绩。

【例7-3】使用静态文本框、组框、编辑框以及按钮等控件设计一37【例7-3】使用静态文本框、组框、编辑框以及按钮等控件设计一(1)属性设置Selection:选择方式 Single──单项选择 Multiple──多项选择,但是忽略Ctrl和Alt键。 Extended──允许使用Ctrl和Alt进行多项选择 None──禁止选择Sort:排序(2)成员函数

添加:intAddString(LPCTSTRlpszItem);示列:m_l.AddString(“大学计算机基础");4.列表框控件

(1)属性设置Selection:选择方式(2)成员函数4.38(1)属性设置Selection:选择方式(2)成员函数4.删除:intDeleteString(UINTnIndex);示例:m_l.DeleteString(4); //删除第5个说明:下标从0开始获取当前选定项目的序号 intDeleteString(UINTnIndex);格式:intGetCurSel()const;示例:inti=m_l.GetCurSel();获取指定项目 intGetText(intnIndex,LPTSTRlpszBuffer)const;voidGetText(intnIndex,CString&rString)const;示例: chars1[20]; CStrings2;, m_l.GetText(4,s1); //读入数组m_l.GetText(4,s2); //读入CString对象删除:intDeleteString(UINTnIn39删除:intDeleteString(UINTnIn【例7-4】编写一个如图所示的能对列表框进行项目添加、修改和删除操作的应用程序。“添加”按钮的功能是将文本框中的内容添加到列表框,“删除”按钮的功能是删除列表框中选定的选项。如果要修改列表框,则首先选定选项,然后单击“修改”按钮,所选的选项显示在文本框中,当在文本框中修改完之后再单击“修改确定”按钮更新列表框。

【例7-4】编写一个如图所示的能对列表框进行项目添加、修改和40【例7-4】编写一个如图所示的能对列表框进行项目添加、修改和5.组合框控件

Ctrl+Enter键(1)属性设置5.组合框控件Ctrl+Enter键(1)属性设置415.组合框控件Ctrl+Enter键(1)属性设置5.(2)成员函数

编辑框和列表框的成员函数

GetText()不能用intGetLBText(intnIndex,LPTSTRlpszText)const;voidGetLBText(intnIndex,CString&rString)const;(3)组合框发出的消息

CBN_SELECTCHANGE:选项改变CBN_EDITCHANGE:编辑框中文本改变【例7-5】设计一个如图7.23所示的对话框。如果单击“确定”按钮,则用MessageBox显示所设置的信息。(2)成员函数【例7-5】设计一个如图7.23所示的对话框42(2)成员函数【例7-5】设计一个如图7.23所示的对话框6.滚动条控件滚动条是CScrollBar类的对象,是Windows应用程序中一个很重要的控件,通常附在对话框上用来协助观察数据或确定位置,也可以用来作为数据输入的工具。滚动条有水平和垂直两种。主要成员函数的原型如下:

(1)设置最大值和最小值

voidSetScrollRange(intnMinPos,intnMaxPos,BOOLbRedraw=TRUE);

最小值 最大值TRUE时重画(2)设置滑块的位置

intSetScrollPos(intnPos,BOOLbRedraw=TRUE);

滑块的位置TRUE时重画

6.滚动条控件滚动条是CScrollBar类的对象,436.滚动条控件滚动条是CScrollBar类的对象,滚动条没有消息,但对话框却能接收到WM_HScroll(WM_Vscroll)voidCTESTDlg::OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCDialog::OnHScroll(nSBCode,nPos,pScrollBar);}

pScrollBar:指向用户正在操作的滚动条。nPos:滑块当前位置。nSBCode:用户正在进行的操作滚动条没有消息,但对话框却能接收到WM_HScroll(WM44滚动条没有消息,但对话框却能接收到WM_HScroll(WM7.进度条控件

进度条除了能表示一个过程的进展情况外,使用进度条还可以表明温度、水平面或类似的测量值。进度条的风格属性有:进度条是否有边框、水平(默认)还是垂直、用块还是平滑填充进度条。对进度条的操作都是通过相关的CProgressCtrl类成员函数来实现的。形式:intSetPos(intnPos);

说明:设置进度条的当前位置。

形式:intGetPos();

说明:获取进度条的当前位置。

形式:intSetStep(intnStep);

说明:获取进度条的当前位置。7.进度条控件进度条除了能表示一457.进度条控件进度条除了能表示一8.旋转按钮控件

旋转按钮伙伴窗口旋转按钮控件也称增减按钮,用户单击它们来增加或减小某个值。旋转按钮控件通常是与一个相拌的控件一起使用。若相伴的的控件的Tab次序刚好在旋转按钮的前面,则这时的旋转按钮控件可以自动定位在它的伙伴窗口的傍边,看起来就像一个单一的控件。一般将一个旋转按钮与一个编辑框一起使用,以提示用户进行数字输入。如图7.24所示。8.旋转按钮控件旋转按钮伙伴窗口旋转按钮控件也称468.旋转按钮控件旋转按钮伙伴窗口旋转按钮控件也称默认时旋转按钮控件的最小值是100,最大值是0,看起来好像颠倒一样,需要使用成员函数SetRange来改变。用户单击向上箭头则增加数值,而单击向下箭头则减少数值。使用时,不要忘记在旋转按钮控件的属性对话框中选中“自动结伴”和“设置结伴整数”。MFC的CSpinButtonCtrl类提供了旋转按钮控件的各种操作函数,常用的函数原型有:形式:intSetPos(intnPos);

说明:设置旋转按钮控件的当前位置。

形式:voidSetRange(intnLower,intnUpper);说明:设置旋转按钮控件的上下限。

旋转按钮控件的通知消息只有一个:UDN_DELTAPOS,它是当控件的当前数值将要发生改变时向其父窗口发送的。默认时旋转按钮控件的最小值是100,最大值是47默认时旋转按钮控件的最小值是100,最大值是9.滑块控件

刻度线滑块滑块控件是由滑块和可选的刻度线组成的。当用户用鼠标或方向键移动滑块时,该控件发送通知消息来表明本次改变。滑块是按照程序中指定的增量来移动的。例如,如果用户指定此滑块的范围是5,则滑块只能有6个位置:在滑块控件最左边的一个位置和另外5个此范围内每隔一个增量的位置。通常,这些位置都是由相应的刻度线来标识的。9.滑块控件刻度线滑块滑块控件489.滑块控件刻度线滑块滑块控件MFC的CSliderCtrl类提供了滑块控件的各种操作函数,常用的函数原型有:形式:intSetPos(intnPos);

说明:设置滑块控件的当前位置。

形式:voidSetRange(intnMin,intnMax,BOOLbRedraw=FALSE);

说明:设置滑块控件的上下限。形式:BOOLSetTic(intnTic);

说明:设置滑块控件中的一个刻度线的位置。

形式:voidSetTicFreq(intnFreq);说明:设置滑块控件刻度线的疏密程度。MFC的CSliderCtrl类提供了滑块控49MFC的CSliderCtrl类提供了滑块控【例7-6】设计如图7.27所示的界面,用滚动条、滑块与旋转按钮控件来雕整RGB的三个颜色分量。

【例7-6】设计如图7.27所示的界面,用滚动条、滑块与旋转50【例7-6】设计如图7.27所示的界面,用滚动条、滑块与旋转7.5菜单、工具栏与状态栏设计

1.菜单的设计菜单属于CMenu类。Windows应用程序的菜单由两部分组成:一是主菜单,一般位于顶层;二是弹出菜单,它是单击主菜单中的菜单项时弹出的子菜单。

用编辑器设计菜单的主要操作有:

(1)显示菜单——在工作区中选定“ResourceView”,展开Menu,双击其中的IDR_MAINFRAME,可以看到由AppWizard生成的标准菜单。

(2)删除菜单项——选定菜单项,然后按Del键。

(3)添加菜单项——双击空白菜单框,弹出“MenuItemProperties”,输入菜单项的标题(名称)。若菜单项有一个子菜单(单击会弹出了一子菜单),则选定“弹出”,否则不要选定“弹出”;要输入一条分割线,则选定“分隔符”。7.5菜单、工具栏与状态栏设计1.菜单的设计517.5菜单、工具栏与状态栏设计1.菜单的设计7.5菜

(4)热键字符和快捷键的设置——假定菜单项的标题是:红色(&R)\tCTRL+F1

,则R设置为热键字符,CTRL+F1是快捷键,\t让快捷键右对齐。打开Accelerator的资源项,双击IDR_MAINFRAME,出现快捷键资源列表。

(5)使用快捷菜单——快捷菜单是一种浮动式的弹出式菜单,当用户按下鼠标右键时,就会相应地弹出一个浮动菜单,其中提供一个或多个与当前操作相关的选项。用资源编辑器和MFC库的CMenu::TracePopupMenu函数可以很容易地创建这样的菜单,该函数原型如下:BOOLTracePopupMenu(UNITnFlags,intx,inty,CWnd*pwnd,LPCRECTlpRect=NULL);该函数用来显示一个浮动的弹出菜单,其位置由各参数决定。其中,nFlags表示菜单在屏幕显示的位置以及2按钮的标志。(4)热键字符和快捷键的设置——假定菜单项的标题是52(4)热键字符和快捷键的设置——假定菜单项的标题是2.工具栏的设计工具栏是一系列工具按钮的组合,借助它们可以提高用户的工作效率。VisualC++6.0系统保存了每个工具栏相应的位图,其中包括所有按钮的图像,而所有的按钮图像具有相同的尺寸(16像素宽,15像素高),它们在位图中的排列次序与屏幕上按钮在工具栏上的次序相同。

(1)使用工具栏编辑器——选择ResourceView选项卡,双击“Toolbar”项中的IDR_MAINFRAME,打开工具栏编辑器。

(2)工具栏和菜单相结合——工具栏和菜单相结合是指当选择工具按钮或菜单命令时,操作结果是一样的。使它们结合的具体方法是在工具按钮的属性对话框中将按钮的ID号设置为相关联的菜单项ID。2.工具栏的设计532.工具栏的设计2.工具栏的设计537.6文档/视图结构应用程序

文档:用于管理应用程序的数据视图:用户界面,用于显示、打印文档中的数据,管理与用户的交互。数据的管理与显示分离的思想简化了开发过程文档/视图结构应用程序:SDI与MDI

【例7-7】利用APPWizard创建一个类似Windows记事本程序。7.6文档/视图结构应用程序文档:用于管理应用程序的数据547.6文档/视图结构应用程序文档:用于管理应用程序的数据分析:1.利用Appwizard创建一个SDI程序框架时,在向导第六步中将视图类的基类由Cview改为CEditView;2.在工作区窗口中选定“ResourceView”1)展开Menu,双击IDR_MAINFRAME,在“编辑”菜单下按下表添加菜单项,无须编写消息处理函数。菜单项标题菜单项ID分隔线无,选定“分隔符”复选框全选(&A)\tCtrl+AID_EDIT_SELECT_ALL查找(&F)\tCtrl+FID_EDIT_FIND查找下一个(&N)\tF3ID_EDIT_REPEAT替换(&H)\tCtrl+HID_EDIT_REPLACE2)展开Accelerator,双击IDR_MAINFRAME,在其中设置快捷键。3)展开StringTable,双击StringTable,打开字符串编辑窗口,修改默认文件扩展名:

记事本\n\nTest\n文本文件(*.txt)\n.txt\nTest.Document\nTestDocument分析:菜单项标题菜单项ID分隔线无,选定“分隔符”复选框全选55分析:菜单项标题菜单项ID分隔线无,选定“分隔符”复选框全选【例7.8】选定了“日期”显示日期,选定“时间”显示时间。m_k1(BOOL)m_k2(BOOL)m_e1(CString)m_e2(CString)CTime类封装了日期和时间静态成员GetCurrentTime()返回系统当前的日期和时间。7.7程序举例【例7.8】选定了“日期”显示日期,选定“时间”显示时间。m56【例7.8】选定了“日期”显示日期,选定“时间”显示时间。mvoidCTESTDlg::OnCheck1(){UpdateData(TRUE);if(m_k1==TRUE){CTimetime=CTime::GetCurrentTime();//构造“YYYY.MM.DD”形式的日期字符串m_e1=time.Format("%Y.%m.%d");}elsem_e1="";UpdateData(FALSE);}voidCTESTDlg::OnCheck2(){UpdateData(TRUE);if(m_k2==TRUE){CTimetime=CTime::GetCurrentTime();//构造“HH.MM.SS”形式的时间字符串m_e2=time.Format("%I.%M.%S");}elsem_e2="";UpdateData(FALSE);}voidCTESTDlg::OnCheck1()void57voidCTESTDlg::OnCheck1()void【例7-9】设计如图7.32(a)所示的界面,当单击“确定”按钮后用MessageBox函数显示如图7.32(b)所示的选择情况。

图7.32(a)控件综合应用示例图7.32(b)【例7-9】设计如图7.32(a)所示的界面,当单击“确定”58【例7-9】设计如图7.32(a)所示的界面,当单击“确定”UpdateData(TRUE);CStrings,ch;intm;s=m_e1;if(IsDlgButtonChecked(IDC_RADIO1))s=s+":男";elses=s+":女";if(m_L.GetCurSel()!=-1){m_L.GetText(m_L.GetCurSel(),ch);s=s+","+ch;}ch.Format("%3d",m_e2);s=s+","+ch;if(m_e3!="")s=s+","+m_e3+'\n';

for(inti=IDC_CHECK1;i<IDC_CHECK6+1;i++){m=((CButton*)GetDlgItem(i))->GetCheck();if(m==1) {GetDlgItemText(i,ch); s=s+","+ch;}}s=s+","+m_e4;MessageBox(s,"你的选择:");UpdateData(TRUE);59UpdateData(TRUE);Update第7章VisualC++可视化编程基础7.1Windows程序设计概述7.2API及应用程序基本框架7.3MFC及应用程序框架7.4对话框与常用控件7.5菜单、工具栏与状态栏设计7.6文档/视图结构应用程序7.7程序举例第7章VisualC++可视化编程基础7.1Windo60第7章VisualC++可视化编程基础7.1Windo7.1.1基于VisualC++的Windows应用程序设计方法

7.1Windows程序设计概述用VisualC++编写Windows应用程序主要有两种方法:

1.ApplicationProgrammingInterface——APIAPI是Windows系统和Windows应用程序间的标准程序接口,应用程序可以通过此接口访问系统。凡是在Windows工作环境下执行的应用程序都可以通过调用API函数来实现各种功能的操作。在Windows程序设计的初期,程序员所能做使用的编程工具就只有使用API函数,通过API函数的调用组合,就可以搭建出各种界面丰富、功能灵活的应用程序。

2.MicrosoftFoundationClass——MFCMFC是VisualC++的核心,是Microsoft公司提供的用来编写Windows应用程序的C++类库,集成了大量已经预先定义好的类,大约有200多个,用户可以根据编程的需要调用相应的类或自定义有关的类。这些类可以分成两种:一是CObject类的派生类;二是非CObject派生类,如表示点的CPoint类,表示矩形的CRect类等。7.1.1基于VisualC++的Windows应用程序设617.1.1基于VisualC++的Windows应用程序设可视化编程基础课件62可视化编程基础课件627.1.2Windows程序设计的基本概念

Windows应用程序的特点:具有标准的图形用户界面。具有与硬件无关的特性。采用“消息传递,事件驱动”的运行机制。1.窗口与对象

窗口是应用程序与用户之间交互的接口环境。用户可以通过窗口输入数据,控制应用程序的运行;应用程序可以通过窗口显示数据和运行状态。对象是指Windows的规范部件,包括各种窗口、菜单、按钮、对话框以及程序模块等。2.常用Windows数据类型

Windows应用程序的源程序中包含种类繁多的数据类型,其中windows.h是用户调用系统功能的关键,文件中定义了Windows系统使用的数据类型。

7.1.2Windows程序设计的基本概念Windows637.1.2Windows程序设计的基本概念Windows3.句柄

句柄是指系统创建对象后返回的用来代表该对象的一个唯一的4字节长整数值,是整个Windows编程的基础,用于标识应用程序中不同的对象和同类对象中不同的实例。例如,一个窗口、按钮、图标、滚动条、输出设备、控件或者文件等。应用程序通过句柄能够访问相应的对象信息,它代表对对象的引用。

4.事件驱动

Windows应用程序以消息为基础,以事件驱动之。Windows应用程序启动之后将进入一个消息循环,等待系统或应用程序的消息,消息的产生是因为事件发生的结果,Windows程序设计主要围绕编写事件或消息的响应函数上。

5.消息及其在Windows编程中的应用

Windows应用程序的运行是依靠事件来驱动,利用一个while循环实现不断等待,如果有事件发生,操作系统会以消息的形式传递给应用程序,应用程序会捕获相应的消息,然后通过调用相应的函数响应消息。3.句柄643.句柄3.句柄647.1.3Windows应用程序中的常见消息消息在Windows程序设计中是很关键的因素,在API程序设计方法中要求熟练记忆常见消息,但是在MFC程序设计方法中只要求了解这些消息的相关含义即可。1.鼠标消息2.键盘消息3.关闭窗口消息4.退出程序消息5.重画消息7.1.3Windows应用程序中的常见消息657.1.3Windows应用程序中的常见消息7.2API及应用程序基本框架7.2.1WindowsAPI应用程序实例

共有上千个标准的API函数,调用方法与调用C语言库函数类似示例:#include"windows.h"intAPIENTRYWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){MessageBox(NULL,"简单的Windows应用程序!","API函数示例",MB_OK);return0;}7.2API及应用程序基本框架7.2.1Windows667.2API及应用程序基本框架7.2.1Windows注意:不是典型的Windows应用程序,典型WinMain具有固定结构,完成三个任务:

注册窗口类、创建并初始化窗口、创建消息循环注意:不是典型的Windows应用程序,典型WinMain具67注意:不是典型的Windows应用程序,典型WinMain具7.2.2WindowsAPI应用程序结构分析Windows应用程序具有相对固定的基本结构,其中由入口函数WinMain和窗口函数构成基本框架,并包含各种数据类型、数据结构与函数等。1.WinMain函数WinMain函数是所有Windows应用程序的入口,类似于C语言中的main函数,其功能是完成一系列的定义和初始化工作,并产生消息循环。WinMain函数有三个基本的组成部分:函数说明、初始化和消息循环。2.窗口函数窗口函数是应用程序处理接收到的消息的函数,其中包含了应用程序对各种可能接收到的消息的处理过程。7.2.2WindowsAPI应用程序结构分析687.2.2WindowsAPI应用程序结构分析7.3MFC及应用程序框架

7.3.1MFC概述微软基础类库(MFC)是微软为Windows程序员提供的一个面向对象的Windows编程接口,它封装了大部分WindowsAPI函数,大大简化了Windows编程工作。Microsoft公司的MFC具有以下特点:1.完全支持所有的Windows函数、控制、消息、GDI(图形设备接口)基本图形函数、菜单以及对话框。2.使用与传统的WindowsAPI同样的命名规则,因此,一个类所能完成的工作可直接从名字得知。3.不使用容易产生错误的switch/case语句。4.通过发送有关对象信息到文件的能力,来提供更好的判断支持。也可以确认成员变量。5.代码少,速度快,容错处理能力强。6.在运行时确定数据对象的设计。7.3MFC及应用程序框架7.3.1MFC概述697.3MFC及应用程序框架7.3.1MFC概述7.37.3.2应用程序框架在VisualC++中,可以创建以下3类典型的Windows应用程序,它们都是通过MFCAppWizard(exe)(以下简称AppWizard)向导创建的:

(1)基于对话框的应用程序:这类程序适合于文档较少而交互操作较多的应用场合,如Windows自带的计算器程序。

(2)单文档界面(SDI)应用程序:这类程序一次只能打开一个文档,如Windows自带的记事本程序。

(3)多文档界面(MDI)应用程序:这类程序可以同时打开多个文档并进行处理,处理的过程中很容易地进行切换,如MicrosoftWord。7.3.2应用程序框架707.3.2应用程序框架7.3.2应用程序框架707.4对话框与常用控件对话框是Windows应用程序中最重要的用户界面元素之一,是与用户交互的重要手段。在VisualC++中,对话框既可以单独组成一个简单的应用程序,又可以成为文档/视图结构程序的资源。

7.4.1创建对话框程序的步骤1.建立基于对话框的MFC应用程序框架2.放置控件,设置属性,完成对话框窗口界面设计3.为控件连接变量,即为控件命名。4.添加并且编写消息处理函数。5.编译、链接并运行应用程序7.4对话框与常用控件对话框是Windows应717.4对话框与常用控件对话框是Windows应可视化编程基础课件72可视化编程基础课件72由于对话框的代码是以类为模块来设计的,使用时需要在程序中加入该类的头文件,并定义一个类对象,然后就可以直接使用该类的相关成员。使用的步骤如下:1.利用项目工作区ClassView打开相应的.cpp文件,在该源文件的前面加上对话框类的头文件。

假设我们为对话框定义的类名为CMyDlg,则需在源文件的前面加上:#include“MyDlg.h”//注意头文件前比类名少个大写的C2.在需要调用的位置添加下列代码:

CMyDlgdlg;//定义对话框对象

dlg.DoModal();//显示对话框7.4.2对话框的调用由于对话框的代码是以类为模块来设计的,使用时73由于对话框的代码是以类为模块来设计的,使用时为了方便用户的程序开发,VisualC++提供了一些通用对话框和消息对话框供用户使用。1.通用对话框Windows提供了一组标准用户界面的对话框,它们都有相应的MFC库中的类来支持。用来操作这些通用对话框的类就是CCommonDialog类,它从Cdialog类中派生,用户可以与使用其他对话框一样使用通用对话框。2.消息对话框消息对话框是最简单的一种对话框,它只是用于显示信息。在VisualC++6.0的MFC类库中就提供相应的函数实现这样的功能,使用时,只要在用户程序任何地方调用它们即可。它们的函数原型如下:7.4.3通用对话框与消息对话框为了方便用户的程序开发,VisualC++74为了方便用户的程序开发,VisualC++

intAfxMessageBox(LPCTSTRlpszText,UINTnType=MB_OK,UINTnIDHelp=0);intMessageBox(LPCTSTRlpszText,LPCTSTRlpszCaption=NULL,UINTnType=MB_OK);这两个函数都是用于创建和显示消息对话框的,只不过AfxMessageBox是全程函数,可用在任何地方。而MessageBox只能用于控件、对话框、窗口等一些窗口类中。例如:intn=MessageBox("输入成绩?","系统提示",MB_YESNO|MB_ICONQUESTION);if(n==IDYES) {……}intAfxMessageBox(LPCT75intAfxMessageBox(LPCT1.控件添加的方法

2.控件的选取

3.控件的移动、复制与删除

4.设定控件的Tab键次序

5.控件的布局

6.常用控件的控件通知消息

选择指针静态文本控件组框复选框组合框水平滚动条旋转滑块列表控件Tab控件超文本控件月历自定义控件图像编辑框按钮单选按钮列表框垂直滚动条进度条热键树状控件动画日期时间选择IP地址扩展组合框图7.13控件工具栏上下左右对齐水平或垂直方向均匀分布切换栅格或向导上下或左右居中使控件具有相同的宽度或大小测试对话框图7.15控件布局工具栏7.4.4控件基本操作1.控件添加的方法选择指针静态文本控件组框复选框组合框水平761.控件添加的方法选择指针静态文本控件组框复选框组合框水平7.4.5CString类对字符串的存取及有关操作,还可通过标准C++里的字符串类string(定义在string.h头文件中)和MFC中的CString类(定义在afx.h头文件中)。string是一种用户自定义的数据类型,它由C++标准库来支持,而不是C++语言本身的一部分。在使用string数据类型之前,需要在程序中包含头文件string并声明其所在的名字空间std,如:#include<string>usingnamespacestd;然后在程序中即可定义string类型的变量。如:

stringname="张三";下面主要介绍MFC中CString类的使用。7.4.5CString类对字符串的存777.4.5CString类对字符串的存当要使用MFC中的CString类时,首先必须选择“工程→设置”命令,在“MicrosoftFoundationClass”选择除“NotUsingMFC”以外的项目。然后源程序的头文件加上:#include"afx.h"形式:CString对象名;CString对象名="字符串常量";

CString对象名("字符串常量");

CString对象名('字符',intn);

//重复产生n个相同的字符例如:CStrings1="C++程序设计";

CStrings('d',5);cout<<s;//s获得字符串”ddddd”1.定义CString类对象当要使用MFC中的CString类时,首先必78当要使用MFC中的CString类时,首先必CString类的特色之一是可将一些常用运算符直接作用用于其对象。假设已有如下定义的CString对象:CStringst1("ASDFG"),st2,st3("DD");运算符含义实例结果=赋值st2=”C++程序设计”;st3=st1;st2的值为”C++程序设计”st3的值为”ASDFG”+字符串连接st2=st2+”教程”st2的值为”C++程序设计教程”+=字符串连接并赋值st2+=”教程”在st2相同初值的基础上效果同上>、<、==、>=、<=、!=关系运算st1==”ASDF”st1<st3falsetrue[]取指定位置的字符将CString对象看成数组st1[0]st1[3]‘A’//第一个字符位置为0‘F’2.基本运算CString类的特色之一是可将一些常用运算符直接79CString类的特色之一是可将一些常用运算符直接形式:

函数值类型CString对象.成员函数名(参数列表)(1)取子串形式:CStringMid(int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论