Visual,C++可视化编程基础ppt课件.ppt

第7章VisualC 可视化编程基础 7 1Windows程序设计概述7 2API及应用程序基本框架7 3MFC及应用程序框架7 4对话框与常用控件7 5菜单 工具栏与状态栏设计7 6文档 视图结构应用程序7 7程序举例 1 7 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类等 2 3 7 1 2Windows程序设计的基本概念 Windows应用程序的特点 具有标准的图形用户界面 具有与硬件无关的特性 采用 消息传递 事件驱动 的运行机制 1 窗口与对象窗口是应用程序与用户之间交互的接口环境 用户可以通过窗口输入数据 控制应用程序的运行 应用程序可以通过窗口显示数据和运行状态 对象是指Windows的规范部件 包括各种窗口 菜单 按钮 对话框以及程序模块等 2 常用Windows数据类型Windows应用程序的源程序中包含种类繁多的数据类型 其中windows h是用户调用系统功能的关键 文件中定义了Windows系统使用的数据类型 4 3 句柄句柄是指系统创建对象后返回的用来代表该对象的一个唯一的4字节长整数值 是整个Windows编程的基础 用于标识应用程序中不同的对象和同类对象中不同的实例 例如 一个窗口 按钮 图标 滚动条 输出设备 控件或者文件等 应用程序通过句柄能够访问相应的对象信息 它代表对对象的引用 4 事件驱动Windows应用程序以消息为基础 以事件驱动之 Windows应用程序启动之后将进入一个消息循环 等待系统或应用程序的消息 消息的产生是因为事件发生的结果 Windows程序设计主要围绕编写事件或消息的响应函数上 5 消息及其在Windows编程中的应用Windows应用程序的运行是依靠事件来驱动 利用一个while循环实现不断等待 如果有事件发生 操作系统会以消息的形式传递给应用程序 应用程序会捕获相应的消息 然后通过调用相应的函数响应消息 5 7 1 3Windows应用程序中的常见消息 消息在Windows程序设计中是很关键的因素 在API程序设计方法中要求熟练记忆常见消息 但是在MFC程序设计方法中只要求了解这些消息的相关含义即可 1 鼠标消息2 键盘消息3 关闭窗口消息4 退出程序消息5 重画消息 6 7 2API及应用程序基本框架 7 2 1WindowsAPI应用程序实例 共有上千个标准的API函数 调用方法与调用C语言库函数类似示例 include windows h intAPIENTRYWinMain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpLine intnShow MessageBox NULL 简单的Windows应用程序 API函数示例 MB OK return0 7 注意 不是典型的Windows应用程序 典型WinMain具有固定结构 完成三个任务 注册窗口类 创建并初始化窗口 创建消息循环 8 7 2 2WindowsAPI应用程序结构分析 Windows应用程序具有相对固定的基本结构 其中由入口函数WinMain和窗口函数构成基本框架 并包含各种数据类型 数据结构与函数等 1 WinMain函数WinMain函数是所有Windows应用程序的入口 类似于C语言中的main函数 其功能是完成一系列的定义和初始化工作 并产生消息循环 WinMain函数有三个基本的组成部分 函数说明 初始化和消息循环 2 窗口函数窗口函数是应用程序处理接收到的消息的函数 其中包含了应用程序对各种可能接收到的消息的处理过程 9 7 3MFC及应用程序框架 7 3 1MFC概述微软基础类库 MFC 是微软为Windows程序员提供的一个面向对象的Windows编程接口 它封装了大部分WindowsAPI函数 大大简化了Windows编程工作 Microsoft公司的MFC具有以下特点 1 完全支持所有的Windows函数 控制 消息 GDI 图形设备接口 基本图形函数 菜单以及对话框 2 使用与传统的WindowsAPI同样的命名规则 因此 一个类所能完成的工作可直接从名字得知 3 不使用容易产生错误的switch case语句 4 通过发送有关对象信息到文件的能力 来提供更好的判断支持 也可以确认成员变量 5 代码少 速度快 容错处理能力强 6 在运行时确定数据对象的设计 10 7 3 2应用程序框架在VisualC 中 可以创建以下3类典型的Windows应用程序 它们都是通过MFCAppWizard 以下简称AppWizard 向导创建的 1 基于对话框的应用程序 这类程序适合于文档较少而交互操作较多的应用场合 如Windows自带的计算器程序 2 单文档界面 SDI 应用程序 这类程序一次只能打开一个文档 如Windows自带的记事本程序 3 多文档界面 MDI 应用程序 这类程序可以同时打开多个文档并进行处理 处理的过程中很容易地进行切换 如MicrosoftWord 11 7 4对话框与常用控件 对话框是Windows应用程序中最重要的用户界面元素之一 是与用户交互的重要手段 在VisualC 中 对话框既可以单独组成一个简单的应用程序 又可以成为文档 视图结构程序的资源 7 4 1创建对话框程序的步骤1 建立基于对话框的MFC应用程序框架2 放置控件 设置属性 完成对话框窗口界面设计3 为控件连接变量 即为控件命名 4 添加并且编写消息处理函数 5 编译 链接并运行应用程序 12 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通用对话框与消息对话框 15 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 16 1 控件添加的方法2 控件的选取3 控件的移动 复制与删除4 设定控件的Tab键次序5 控件的布局6 常用控件的控件通知消息 7 4 4控件基本操作 17 7 4 5CString类 对字符串的存取及有关操作 还可通过标准C 里的字符串类string 定义在string h头文件中 和MFC中的CString类 定义在afx h头文件中 string是一种用户自定义的数据类型 它由C 标准库来支持 而不是C 语言本身的一部分 在使用string数据类型之前 需要在程序中包含头文件string并声明其所在的名字空间std 如 includeusingnamespacestd 然后在程序中即可定义string类型的变量 如 stringname 张三 下面主要介绍MFC中CString类的使用 18 当要使用MFC中的CString类时 首先必须选择 工程 设置 命令 在 MicrosoftFoundationClass 选择除 NotUsingMFC 以外的项目 然后源程序的头文件加上 include afx h 形式 CString对象名 CString对象名 字符串常量 CString对象名 字符串常量 CString对象名 字符 intn 重复产生n个相同的字符 例如 CStrings1 C 程序设计 CStrings d 5 cout s s获得字符串 ddddd 1 定义CString类对象 19 CString类的特色之一是可将一些常用运算符直接作用用于其对象 假设已有如下定义的CString对象 CStringst1 ASDFG st2 st3 DD 2 基本运算 20 形式 函数值类型CString对象 成员函数名 参数列表 1 取子串形式 CStringMid intnFirst intnCount 取字符串中nFirst位置开始的nCount个字符CStringLeft intnCount 取字符串的左边nCount个字符CStringRight intnCount 取字符串的右边nCount个字符 有定义 CStrings 12345 则 s Mid 2 2 的值为34s Left 3 的值为123 3 成员函数 21 2 查看字符串信息 intFind TCHARch 返回指定字符在串中的位置intFind LPCTSTRlpszSub 返回指定子串在串中的位置intGetLength 返回字符串的字符数 3 字符串修改 voidSetAt intnIndex TCHARch 用字符替换指定位置上的字符intInsert intnIndex TCHARch 将字符插入到指定位置 原位置的字符右移intDelete intnIndex intnCount 1 从指定位置开始删除一个或多个字符intReplace TCHARchOld TCHARchNew 将新字符替换字符串中的老字符intReplace LPCTSTRlpszOld LPCTSTRlpszNew 同上 区别替换的是子字符串 22 4 转换字符串 voidMakeUpper 将字符串中的所有字符转换成大写voidMakeLower 将字符串中的所有字符转换成小写voidMakeReverse 将字符串中各字符的顺序倒转voidEmpty 将字符串中的所有字符删除 5 格式化输出 形式 viodat 格式字符串 输出参数列