VisualC++.NET程序设计实用教程ppt.ppt_第1页
VisualC++.NET程序设计实用教程ppt.ppt_第2页
VisualC++.NET程序设计实用教程ppt.ppt_第3页
VisualC++.NET程序设计实用教程ppt.ppt_第4页
VisualC++.NET程序设计实用教程ppt.ppt_第5页
已阅读5页,还剩197页未读 继续免费阅读

下载本文档

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

文档简介

VisualC NET程序设计实用教程 第1章走进VisualC NET世界第2章Windows程序设计基础第3章菜单 工具栏和状态栏第4章对话框设计和编程第5章数据库编程第6章图像编程与文字处理第7章文档视图结构第8章网络编程 第1章走进VisualC NET世界 欲善工事 必先利其器 教学内容 1 1VisualC NET编程基础 1 2VisualC NET集成开发环境 IDE 1 3VisualC NET应用程序开发过程 1 4应用程序的调试 1 5小结思考与练习 1 1VisualC NET编程基础 1 1 1VisualStudio NET简介VisualStudio NET是 NET平台下最为强大的开发工具 无论是软件服务商 还是企业应用程序的部署与发布 VisualStudio NET都可以提供近乎完美的解决方案 VisualStudio NET提供了包括设计 编码 编译调试 数据库联接操作等基本功能和基于开放架构的服务器组件开发平台 企业开发工具和应用程序重新发布工具以及性能评测报告等高级功能 VisualStudio NET是一套完整的开发工具 用于生成ASPWeb应用程序 XMLWebservices 桌面应用程序和移动应用程序 VisualBasic NET VisualC NET VisualC NET和VisualJ NET全都使用相同的集成开发环境 IDE 该环境允许它们共享工具并有助于创建混合语言解决方案 1 1VisualC NET编程基础 1 1 2 NET框架 NETFramework为所有的 NET开发语言提供了一个公共的运行环境 而不是为每一种语言提供各自不同的运行环境 这个公共的运行环境称为CommonLanguageRuntime CLR 即公共语言运行时 CLR除了在运行时管理代码的执行之外 CLR也为所有适应CLR的语言提供了一套公共的服务 下面列出了CLR提供的一些重要服务 公共类型系统 CommonTypeSystem CTS 它定义了所有 NET语言的标准数据类型及其格式 公共语言规范 CommonLauageSpecification CLS 它定义了各语言间互操作性的规则 由于CLS定义了规则 任何一种 NET开发语言创建的类就可以由其他 NET语言使用 JIT编译器 Just In Time编译器 当 NET应用程序第一次编译时 编译成一种可以由所有 NET语言共享的中间语言 在应用程序执行时 再由JIT编译器把中间语言转换为可以在目标计算机上执行的可执行文件 代码管理 在创建和销毁对象时 由CLR负责分配和释放内存 垃圾收集器 GarbageCollector GC 释放无用对象所占用的内存 1 1VisualC NET编程基础 1 1 3 NET框架与VisualStudio NET之间的关系 1 1VisualC NET编程基础 1 1 4VisualC NET的特点 1 托管 managed 应用托管应用是使用 NET框架的软件开发工具来编写托管C 语言的 NET应用程序 托管C 语言是对传统C 语言的扩展 它对C 的基本语法没有任何改变 只是对C 语言进行了适当扩展 以帮助VisualC 开发人员编写 NETFramework应用程序 用托管C 所编写的 NET程序具有所有 NET框架支持的特点 2 非托管 unmanaged 应用非托管应用是通过WIN32的软件开发工具包 在微软基础类库 MFC 的基础上 利用传统的C 语言来编写标准的Windows程序 体现了VisualC NET对传统开发模式的兼容性 微软在VisualC NET中保留传统的开发模式主要因为VisualC 具有发展历史长 开发范围广泛 构造出采的应用程序运行效率高 以及具备成熟的开发技术模式等特点 使得VisualC 在许多应用领域依然是宝刀不老的工具 1 2VisualC NET集成开发环境 IDE 1 2 1开发界面 1 2VisualC NET集成开发环境 IDE 1 2 1开发界面 1 2VisualC NET集成开发环境 IDE 1 2 2解决方案资源管理器 1 2VisualC NET集成开发环境 IDE 1 2 3对象浏览器 图1 6VisualStudio NET的对象浏览器 1 2VisualC NET集成开发环境 IDE 1 2 4类视图 1 2VisualC NET集成开发环境 IDE 1 2 5编辑器窗口 1 2VisualC NET集成开发环境 IDE 1 2 6工具箱 1 2VisualC NET集成开发环境 IDE 1 2 7服务器资源管理器 图1 10服务器资源管理器 1 2VisualC NET集成开发环境 IDE 1 2 8属性窗口 1 2VisualC NET集成开发环境 IDE 1 2 9菜单栏和工具栏 1 2VisualC NET集成开发环境 IDE 1 2 9菜单栏和工具栏 1 3VisualC NET应用程序开发过程 1 3 1生成应用程序框架 1 单击 文件 菜单中的 新建 命令的子项 项目 命令 打开 新建项目 对话框 在该对话框左边的 项目类型 列表柜中 单击 VisualC NET 选项 然后在右边的 模版 列表框中选中 MFC应用程序 选项 在窗口下方的 名称 文本框中输入新项目的名称 在 位置 文本框中输入项目存放的位置 也可单击旁边的 浏览 按钮来确定项目存放的位置 如图1 13所示 1 3VisualC NET应用程序开发过程 1 3 1生成应用程序框架 2 完成第1步的设置后 单击 确定 按钮 将弹出 MFC应用程序向导 MyFirstApp 对话框 如图1 14所示 该对话框提供了当前项目的设置信息 1 3VisualC NET应用程序开发过程 1 3 1生成应用程序框架 3 该对话框左边是选项面板链接选项 单击其中的选项可以对编写的程序框架进行设置 首先单击 应用程序类型 选项 弹出如图1 15所示的选项面板 1 3VisualC NET应用程序开发过程 1 3 1生成应用程序框架 4 单击 复合文档支持 选项 打开的选项面板询问是否需要复合文档 ActiveX和OLE 的支持 本例中 在 复合文档支持 选项组中选中 无 单选按钮 如图1 16所示 1 3VisualC NET应用程序开发过程 1 3 1生成应用程序框架 5 单出左边 文档模板字符串 选项 弹出如图1 17所示的对话框 在该对话框中 用户可以设置文档模版的相关信息 如文件的扩展名 文件类型ID 主框架标题 文档类型明 筛选器名 文件的新简称 文件类型全称 用户可以根据自己的需要去改变 也可以去默认值 在本例中 我们在文件扩展名文本框中输入的 hwd 其余选项保持默认设置 如图1 17所示 1 3VisualC NET应用程序开发过程 1 3 1生成应用程序框架 6 单击左边的 数据库支持 选项 弹出如图1 18所示的选项面板 可以设置是否需要数据库支持 由于本例是一个非常简单的显示字符的MFC程序 所以不用选择数据序支持 故在 数据库支持 选项组中选中 无 单选按钮即可 1 3VisualC NET应用程序开发过程 1 3 1生成应用程序框架 7 单击 用户界面功能 选项 从弹出的选项面板 如图1 19所示 中可以定义用户界面风格 1 3VisualC NET应用程序开发过程 1 3 1生成应用程序框架 8 单击左边的 高级功能 选项 弹出如图1 20所示的选项面板 在该选项面板中可设置项目的一些高级特点 如 帮助 打印 等 1 3VisualC NET应用程序开发过程 1 3 1生成应用程序框架 9 单击左边的最后 个选项 生成的类 弹出如图1 21所示的选项面板 在该选项面板中 用户可以设置将要创建的类的属性 1 3VisualC NET应用程序开发过程 1 3 2在文件中添加代码 在项目源文件编辑区里的MyFirstAppView cpp中找到OnDraw 函数 手动添加代码 如下所示 斜体字为自己加入的代码 voidCMyFirstAppView OnDraw CDC pDC pDC TextOut 150 200 VisualC NET欢迎您开始神奇的编程之旅 1 3VisualC NET应用程序开发过程 1 3 2在文件中添加代码 1 4应用程序的调试 1 4 1语法错误的修正调试程序的第一阶段的主要任务是修正一些语法错误 这其中包括 未定义的标识符 如函数名 变量名 类名等 数据类型或参数类型及个数不匹配其他语法错误上述语法错误在程序编译后 在输出窗口区的 任务列表 和 输出 窗口中列出所有错误项 每个错误都给出其所在的文件名 行号及其错误编号 如果用户将光标移到输出窗口中的错误编号上 按F1键可启动MSDN并显示出错误的内容 从而帮助用户理解错误产生的原因 1 4应用程序的调试 1 4 2断点的设置和执行断点是进行程序调试的基本工具 它是指程序中的一个位置 当程序运行到该位置时便停下来 等待调试者发出指令来确定下一步的动作 在程序中设置断点的方法很多 可以把光标停在程序代码的某一行 然后按F9键 此时在该行的左页边出现一个红点 表明已经在该行设置料一个断点 如图1 24所示 如果再按F9键 则红点消失 断点被取消 1 4应用程序的调试 1 4 3查看和更改变量的值1 快速监视对话框的使用快速监视对话框是用来查看或修改某个变量或表达式的值 当然 如果仅仅需要快速查看变量或表达式的值 则只需要将鼠标指针直接放在该变量或表达式上 稍等片刻后 系统会弹出一个小窗口显示出该变量或表达式的值 图1 26快速监视对话框 1 4应用程序的调试 1 4 3查看和更改变量的值2 监视窗口的使用选择 调试 菜单下的 窗口 子菜单中的 监视 菜单的 监视1 命令 则弹出如图1 27所示的监视窗口 用类似的方法可以打开 监视2 监视3 和 监视4 窗口 这些窗口都是一样的 每一个监视窗口均有一系列或一组要查看的变量或表达式 用户可以将一组变量或表达式的值显示在同一页面内 图1 27监视窗口 1 5小结本章介绍了VisualC NET的基础知识 包括 NET框架的知识 托管C 和非托管C 的区别和联系以及VisualStudio NET的集成开发环境 VisualC NET应用程序的开发和调试过程等内容 通过本章的学习 读者应初步掌握VisualC NET程序的开发流程 熟悉VisualStudio NET集成开发环境的使用 为后续课程的学习打下坚实的基础 思考与练习简述应用程序 项目和解决方案的概念和区别 在项目模版创建的应用程序中 文件stdafx cpp和stdafx h的作用是什么 概述VisualStudio NET起始页面各主要窗口的功能 概述 NET框架的主要结构 VisualC NET的开发方为包括哪两个方面 什么是断点 如何向应用程序中添加断点 怎样一次性清除掉应用程序中所有的断点 在应用程序的调试过程中 如何更改变量的值 新建一个SDI应用程序 该程序的标题为 我的第一个VisualC NET程序 并在屏幕中央显示 您好 欢迎您来到程序员家园 第2章Windows程序设计基础 勿在浮沙筑高楼 打好基础是关键 教学内容 2 1Windows编程基础 2 2MFC程序设计基础 2 3应用程序框架 2 4综合实例 创建宾馆管理系统的框架 2 5小结思考与练习 2 1Windows编程基础 2 1 1Windows编程基本概念1 窗口窗口是Windows应用程序中一个非常重要的元素 一个Windows应用程序至少要有一个窗口 称为主窗口 从用户的角度讲 窗口是屏幕上与一个应用程序相对应的矩形区域 是用户与应用程序之间的图形化的接口 每当用户打开一个应用程序时 应用程序就会创建并显示一个窗口 当用户操作窗口中的对象时 窗口就会做出反映 关闭主窗口时就会终止应用程序的运行 通过选择应用程序窗口 就会选择与窗口对应的应用程序 从程序员的角度讲 窗口是Windows应用程序的基本操作单元 是系统管理应用程序的基本单位 是应用程序与用户之间交互的接口 应用程序的运行过程就是窗口内部 窗口与窗口之间 窗口与系统之间进行数据处理和数据交换的过程 因此 编写应用程序就是要创建一个或多个窗口 管理多个窗口之间的数据处理与交换 2 1Windows编程基础 2 1 1Windows编程基本概念窗口的特性是由一个WNDCLASS结构体进行定义的 WNDCLASS定义如下 typedefstructtagWNDCLASS UINTstyle 窗口风格WNDPROClpfnWndProc 指向窗口处理函数的函数指针intcbClsExtra 窗口结构中的预留字节数intcbWndExtra 为其它创建窗口预留字节数HINSTANCEhInstance 注册该窗口类的实例句柄HICONhIcon 代表该窗口类的图标句柄HCURSORhCursor 该窗口客户区鼠标光标句柄HBRUSHhbrBackGround 该窗口背景颜色句柄LPCSTRlpszMenuName 指向窗口菜单名的字符指针LPCSTRlpszClassName 指向窗口名的字符指针 WNDCLASS 2 1Windows编程基础 2 1 1Windows编程基本概念2 句柄在Windows程序中 每产生一个资源 如图标 光标 窗口 应用程序的实例等 操作系统都要将它们放入相应的内存 并为这些内存指定一个唯一的标识号 这个标识号即该资源的句柄 操作系统要管理和操作这些资源 都是通过句柄来找到对应的资源的 句柄是系统用来唯一标识某个Windows对象的符号 句柄的数据类型在winnt h中说明如下 typedefvoid HANDLE 从物理上看句柄是一个泛型 无类型 指针 但它不是指向一个Windows对象的存储首地址 而是指向包含了使用该对象有关信息的一块内存单元 从逻辑上说它是一个代号 一个对象的代号 句柄所指向的内容是不能由句柄操作来改变的 只能由系统来改变 2 1Windows编程基础 2 1 1Windows编程基本概念3 消息和消息队列Windows程序设计是面向事件的 在Windows环境下 应用程序启动后 系统等待用户在图形用户界面内的输入选择 如鼠标按键 键盘按键 窗口被创建 关闭 改变大小 移动等 在Windows看来 这些都是事件 只要有事件发生 系统即产生特定的消息 驱动相应的处理函数进行处理 因此Windows应用程序也称为事件驱动程序 消息描述了事件的类别 包含了相关信息 Windows应用程序利用消息与系统及其它应用程序进行信息交换 由于windows事件的发生是随机的 程序的执行先后顺序也无法预测 系统采用消息队列来存放事件发生的消息 每个Windows程序都有一个消息队列 该队列是一个先进先出的缓冲区 通常是一个某种变量类型的数组 2 1Windows编程基础 2 1 1Windows编程基本概念3 消息和消息队列在winuser h中 消息结构的定义如下 typedefstructtagMSG HWNDhWnd 指定消息发向的窗口句柄UINTmessage 标识消息的消息值WPARAMwParam 消息参数LPARAMlParam 消息参数DWORDtime 消息进入队列的时间POINTpt 消息进入队列时鼠标指针的屏幕坐标 MSG 2 1Windows编程基础 4 数据类型 2 1Windows编程基础 2 1 2Windows应用程序的结构1 Windows应用程序的构成构成Windows程序的基本元素包括程序代码 用户界面资源和动态链接库 dynamic linklibrary 库 程序代码主要由可执行代码构成 Windows程序要求有两个函数 一个是WinMain WinMain函数是应用程序的基础 Windows应用程序的入口函数 当Windows操作系统启动一个程序时 它调用的就是该程序的WinMain函数 另一个是窗口处理函数WndProc 对来自系统的消息进行处理 资源是应用程序能够使用的一类预定义工具 用户界面资源是应用程序定义的图形用户接口GUI graphicaluserinterface 如菜单 对话框 按钮等 2 1Windows编程基础 2 1 2Windows应用程序的结构2 Windows消息处理 1 当Windows应用程序开始执行时 操作系统在预定的入口WinMain与应用程序连接 2 应用程序创立一个或多个窗口 每个窗口 包括对话框 都有一个窗口过程函数 程序通过窗口接收用户的输入和决定窗口显示 3 各种输入产生的消息首先进入系统队列 由系统根据产生消息的窗口将消息发至窗口所在应用程序的消息队列 4 程序的消息循环代码段检索从消息队列中来的消息 并把它们返回Windows系统 由系统发送到对应的窗口过程函数进行处理 对于程序未响应的消息 发送至缺省窗口过程函数进行处理 2 1Windows编程基础 2 1 3Windows程序示例为了帮助读者理解Windows编程的概念 下面编写一个简单的Windows应用程序 该程序创建一个窗口 并在该窗口响应鼠标和键盘消息 程序的实现步骤如下 WinMain函数的定义 创建一个窗口 进行消息循环 编写窗口过程函数 2 2MFC程序设计基础 2 2 1MFC类库的层次结构 2 2MFC程序设计基础 2 2 2MFC定义的宏 全局函数及全局变量1 MFC提供的主要宏 消息映射宏 声明消息映射表宏DECLARE MESSAGE MAP 定义消息映射表宏BEGIN MESSAGE MAP和END MESSAGE MAP对 消息映射表入口宏ON 加消息名 动态MFC对象宏 DECLARE DYNCREATE和DECLARE DYNAMIC IMPLEMENT DYNCREATE和IMPLEMENT DYNAMIC 运行时类宏 RUNTIME CLASS 序列化宏 DECLARE SERIAL和IMPLEMENT SERIAL 诊断服务宏 ASSERT VERIFY 跟踪服务宏 TRACE 异常处理宏 THROW 2 2MFC程序设计基础 2 2 2MFC定义的宏 全局函数及全局变量2 全局函数MFC提供一些不属于任何类的全局函数 函数名以Afx开头 可以被应用程序中的所有类和函数所调用 如 AfxAbort 无条件终止一个应用程序的执行 AfxGetAppName 返回指向应用程序名的字符串指针 AfxWinInit由WinMain调用 对MFC应用程序进行图形用户界面 GUI 的初始化等等 AfxGetApp 返回指向应用程序的CWinApp对象的指针 2 3应用程序框架 2 3 1构架Windows应用程序框架1 创建应用程序框架使用VisualC NET的应用程序向导 生成一个名为AnalyzeMFC的VC NET项目 注意 我们这个例程中的应用程序的类型为 单文档 类型 在项目AnalyzeMFC中 应用程序向导为用户生成了4个类 这些类所对应的头文件和源文件如表2 5所示 2 3应用程序框架 2 3 1构架Windows应用程序框架2 应用程序的执行过程 2 3应用程序框架 2 3 2文档和视图1 文档与视图的概念 文档 document 指的是数据组合的抽象 它通常对应磁盘文件 也可以对应I O端口 包括打印机 键盘 或一块内存空间 串流 同样的数据 我们可以用不同的方式来表示 把纯的数据放在文件中或数据库中 而把显示方式分离出来 可以让一份数据有多种不同的显示方式 程序中的数据表现称为 视图 view 这样就可以分别考虑数据的保存 文档 和数据的表现 视图 文档就是数据 CDocument就可以简单地理解为负责处理数据的类 在MFC编程时 我们应该把所有要处理的从外部获得的数据全部放在文档类及其派生类的对象中 CDocument类是一个预先编好的类 只是提供了一个外壳或者讲框架 程序员可以在Document中建立实际要用的数据格式及其管理方法 最常用的方法当然是派生出自己的文档类 CMyDocument类 视图类 CView 负责与使用者接触 文档和视图是数据的两个方面 数据的处理在文档中进行 它使用的是字节 整数 浮点数等数据 链表 顺序表和树 图等数据结构 而数据的表现 视图使用的是绘图工具 如绘图域 画笔 调色板等等 CView是为数据的表现而设计的 CView负责程序与用户之间的交互 用户对数据的编辑 修改 对程序下达工作指令都要依赖窗口上的鼠标与键盘操作才能完成 这些信息由View接受后再传给Document 2 文档 视图结构的使用 文档视图结构提供一种连续处理数据的方式 使应用程序的数据与数据的显示分开处理 数据储存在文档类中 即文档类中包含表示程序数据的成员 数据显示由视图负责 视图是程序窗口的客户区 用户通过视图与程序交互 框架窗口是客户区的框架 一个文档可以对应多个不同视图 如在Excel应用中 数据既可以以数值方式显示 也可以图形方式显示 而一个视图一般只对应一个文档 当文档数据发生变化时 视图显示的状态也会随之变化 对于多个视图的情况 基于同一文档的多个视图的显示同步变化 2 3应用程序框架 3 文档 视图和框架的关系 2 3应用程序框架 2 3 3消息映射机制MFC应用程序与其它Windows应用程序一样 通过消息通知事件的发生 程序响应消息 程序的执行结果取决于对消息的响应方式 MFC引入消息映射 MessageMap 机制 简化了但增强了消息处理功能 消息映射机制定义消息映射表 将消息与处理消息的函数联系在一起 当事件发生产生消息时 在程序中各个类的消息映射表中查找 当找到消息处理函数时 便将消息送至对应的消息处理函数进行处理 每个从CCmdTarget所派生的类都可以接收消息 都可以定义自己的消息映射表MessageMap 2 4综合实例 创建宾馆管理系统的框架 建立应用程序框架 设置应用程序的标题为 领航宾馆管理系统v1 0 使应用程序的主窗口在桌面上居中显示 改变窗口的背景颜色 2 5小结本章介绍了Windows编程的基本概念 分析了Windows应用程序的结构 并在此基础上 介绍了微软基础类库MFC的基础知识和如何利用VisualC NET集成开发环境创建Windows应用程序框架 重点分析了应用程序框架中个个类的功能和结构以及MFC应用程序的执行过程 以便读者能够迅速了解应用程序框架 添加相应的代码来完成自己的程序 最后 通过一个综合实例说明了如何建立应用程序框架 修改应用程序框架以达到自己的目的具体方法 本章是后续课程学习的基础 读者应该通过程序仔细理解这些内容 为下面软件的开发奠定基础 思考与练习理解以下概念 窗口 句柄 消息和消息队列 MFC的优点有哪些 文档和视图的作用是什么 单文档应用程序框架中各个类的作用和功能是什么 创建一个你需要的SDI应用程序框架 设置断点来跟踪MFC应用程序的执行流程 加深对MFC应用程序执行过程的理解 利用应用程序向导生成一个多文档的应用程序 在其文档窗口中显示 您好 欢迎您走进VC NET世界 第3章菜单 工具栏和状态栏 设计实用程序界面 增加程序的亲活力 教学内容 3 1菜单 3 2工具栏的设计和使用 3 3状态栏的设计与使用 3 4综合实例 3 5小结思考与练习 3 1菜单 3 1 1Windows的菜单菜单主要由上层水平菜单和与其关联的弹出菜单组成 当用户选择某个水平列表菜单项后 与其相关联的菜单会随之弹出 用户可以在选择执行其中的菜单命令 通常 弹出菜单由多个菜单项组成 这些菜单项可以分为三类 见下图 1 直接关联某个菜单命令 执行某个相应功能 2 弹出一个相关联的对话框 通常这种菜单项后跟随有省略号 3 弹出一个相关联的子菜单 这种菜单项后用一个向右的箭头来表示 3 1菜单 3 1 2用编辑器设计菜单1 编辑菜单在利用应用程序向导创建单文档应用程序时 向导会自动生成标准的菜单资源IDR MAINFRAME 该菜单资源定义了一组常用的菜单命令 用户可以根据需要来编辑该菜单资源 从而创建出自己的菜单系统 编辑菜单资源的步骤如下 1 打开菜单资源编辑器 菜单的空位置 3 1菜单 3 1 2用编辑器设计菜单1 编辑菜单 2 建立顶层菜单在图3 2中 单击菜单条的新条目框 请在此处输入 输入新菜单的名称 如 我的菜单 然后按回车 就可以在指定位置建立一个顶层菜单 3 设置菜单项属性 在菜单条属性窗口中编辑菜单条属性 如图3 3所示 在属性窗口中 用户可以定义菜单的文本内容和资源ID号 虽然 ID号的定义是随意的 但最好按易于记忆的原则来确定 菜单属性窗口中主要属性的含义如表3 1所示 图3 3菜单属性窗口 3 1菜单 3 1 2用编辑器设计菜单1 编辑菜单 3 1菜单 3 1 2用编辑器设计菜单2 建立菜单处理函数 1 菜单消息WM COMMAND为菜单命令消息 当选择菜单项或工具栏按钮或激活了加速键会发出命令消息 MFC依据一定的消息传递途径将消息传递给相应的处理函数进行处理 如果在消息传递途径的消息映射表中找不到相应的处理函数 该菜单项或按钮会被禁止使用 UPDATE COMMAND UI是菜单更新消息 处理菜单状态的动态变化 如希望根据程序的执行状态 激活或禁用某些菜单项 设置选中标记 或更改菜单项的文字等 就要定义这一消息处理函数 3 1菜单 3 1 2用编辑器设计菜单2 建立菜单处理函数 2 编写菜单消息处理函数在编写消息处理函数时 右击该菜单项 在弹出的快捷菜单中选择 添加事件处理程序向导 打开 添加事件处理程序向导 对话框 如图3 4所示 3 1菜单 3 1 3定义菜单项的加速键 3 1菜单 3 1 4菜单创建示例程序1 建立应用程序MenuExample2 打开菜单资源编辑器 添加菜单资源3 编写菜单处理函数4 给菜单添加快捷键5 给菜单添加界面更新消息响应函数 当某个菜单被选中后 在该菜单项的前面加上选中标记 3 1菜单 3 1 5动态菜单设计1 菜单的基本操作 1 创建菜单CMenu类的CreateMenu和CreatePopupMenu分别用来创建一个菜单或子菜单框架 2 装入菜单资源将菜单资源装入应用程序中 需要调用CMenu成员函数LoadMenu 3 添加菜单项当菜单创建后 用户可以调用AppendMenu或者InsertMenu函数来添加一些菜单项 3 1菜单 3 1 5动态菜单设计2 动态菜单设计示例要添加动态菜单 首先要通过全局函数AfxGetMainWnd 得到主窗口指针 再通过该指针调用GetMenu 函数获得指向该顶层菜单的指针 然后通过GetSubMenu 由它的参数为序号确定哪个顶层菜单项将显示动态菜单 注意 主菜单项的编号是0为初始值从左到右编排 另外 还需要编写函数 以便接受动态菜单产生变化的命令和动态控制菜单项的状态 3 1菜单 3 1 6快捷菜单的实现快捷菜单是一种浮动的弹出式菜单 它是一种新的用户界面设计风格 当用户在某处按下鼠标右键时 就会弹出一个相应的浮动菜单 其中提供了一些与当前内容相关的菜单项 在VisulC NET中 利用资源编辑器和MFC的CMenu TrackPopupMenu 函数可以很容易地创建这样的菜单 3 2工具栏的设计和使用 3 2 1工具栏位图工具栏中的每一个似乎都应该有自己的位图 但实际上整个工具栏只有一个位图 每一个按钮都在其中占有一个15像素高和16像素宽的位图片 应用程序框架为每一个按钮都提供了一个边框 并且可以通过对按钮的边框及位图颜色的修改来反映当前按钮的状态 工具栏的位图被保存在应用程序的 res子目录下的Toolbar bmp文件中 它在资源文件中是通过IDR MAINFRAME来标识的 通常我们不要直接编辑工具栏位图 而是应使用工具栏编辑器来进行编辑 3 2工具栏的设计和使用 3 2 2工具栏和命令消息当用户用鼠标按下某个工具栏按钮时 就会产生相应的命令消息 该消息可以像菜单命令消息一样进行传递 在大多数情况下 工具栏按钮都和相应的菜单选择相对应 例如 在标准应用程序框架工具栏中 磁盘按钮就和 文件 菜单中的 保存 菜单项相对应 因为它们都产生了ID FILE SAVE命令 接收到该命令消息的对象根本用不着关心该消息是通过按下工具栏中的按钮产生的 还是通过菜单选择产生的 工具栏按钮并不一定非要和菜单项相对应 但如果某个工具栏按钮没有与之对应的菜单项 则建议最好为该按钮定义相应的键盘加速键 以便用户通过键盘来激发该命令 不管工具栏按钮是否有与之相对应的菜单项 我们都可以利用添加消息处理函数向导为它们定义相应的命令消息控制函数和更新命令UI消息控制函数 3 2工具栏的设计和使用 3 2 3工具栏更新命令UI消息控制函数更新命令UI消息控制函数通常是用来对菜单项进行禁止和复选的 但这些消息控制函数同样也可以用来作用于工具栏按钮 如果更新命令UI消息控制函数用FALSE参数来调用CcmdUI Enable成员函数 那么相应的按钮就会被置成禁止 变灰 状态 也就不会对作用于它上面的鼠标按键做出任何反应 对菜单项来说 CcmdUI SetCheck函数会在菜单项的旁边显示一个复选标记 但对于工具栏来说 SetCheck函数则把它包含的按钮都当作复选框按钮来处理了 如果更新命令UI消息控制函数以参数1来调用SetCheck函数 那么相应的按钮就会被置复选状态 如果更新命令UI消息控制函数以参数0来调用SetCheck函数 那么相应的按钮就会被置未被复选状态 3 2工具栏的设计和使用 3 2 4寻找主框架窗口如果我们希望既可以在SDI应用程序中 又可以在MDI应用程序通过视图类来访问主框架窗口 那么我们必须通过应用程序对象来获得主框架窗口 全局函数AfxGetApp返回的是一个指向应用程序对象的指针 借助这个指针我们就可以得到CWinApp类的m pMainWnd数据成员 在MDI应用程序中 应用程序向导自动生成了对m pMainWnd进行赋值的代码 而在SDI应用程序中 应用程序框架是在视图类的创建过程中对m pMainWnd进行设置的 m pMainWnd一旦被设置 我们就可以按如下方式在视图类中得到框架的工具栏 CMainFrame pFrame CMainFrame AfxGetApp m pMainWnd CtoolBar pToolBar 3 3状态栏的设计与使用 3 3 1状态栏的定义状态栏是出现在应用程序窗口底部的显示程序运行状况的窗口 当用户选择了菜单项或某个工具栏按钮时 状态栏显示它们的提示字符串 状态栏中的子窗口可以分为状态信息行和状态指示器 如图所示 状态信息行显示应用程序动态提供的字符串 例如单击菜单的命令提示信息 状态指示器显示一些状态信息 如键盘某些键的状态如Capslock键的状态 StaticUNITindicators ID SEPARATOR ID INDICATOR CAPS ID INDICATOR NUM ID INDICATOR SCRL 3 3状态栏的设计与使用 3 3 2状态栏的常用操作1 增加和减少窗格 状态栏中的窗格可以分为信息行窗格和指示器窗格两类 若在状态栏中增加一个信息行窗格 则只需在indicators数组中的适当位置中增加一个ID SEPARATOR标识 若在状态栏中增加一个用户指示器窗格 则在indicators数组中的适当位置增加一个在字符串表中定义过的资源ID 其字符串的长度表示用户指示器窗格的大小 若状态栏减少一个窗格 其操作与增加相类似 只需减少indicators数组元素 2 在状态栏上显示文本 有三种办法可以在状态栏窗格显示文本信息 1 调用CWnd SetWindowText更新信息行窗格 或窗格0 中的文本 2 手动处理状态栏的ON UPDATE COMMAND UI更新消息 并在处理函数中调用CCmdUI SetText函数 3 调用CStatusBar SetPaneText函数更新任何窗格 包括信息行窗格 中的文本 此函数原型描述如下 BOOLSetPaneText intnIndex LPCTSTRlpszNewText BOOLbUpdate TRUE 3 4综合实例 宾馆管理系统菜单 工具栏和状态栏设计 3 4 1系统功能分析3 4 2宾馆管理系统的菜单设计3 4 3宾馆管理系统的工具栏设计3 4 3宾馆管理系统的状态栏设计 3 5小结菜单是Windows应用程序中主要的用户界面组件 在资源视图的Menu节点双击IDR MAINFRAME项 可以打开菜单编辑器 借助菜单编辑器 用户可以很方便地编辑菜单资源 Windows的菜单包括静态菜单 动态菜单和快捷菜单 MFC提供的CMenu类包含了创建 更新和删除菜单的成员函数 利用这些函数可以在程序执行时动态控制菜单内容 菜单状态和弹出快捷菜单 工具栏有两个要素 工具栏资源和工具栏类CToolBar 如果用户只需要一个工具栏 可利用向导自动生成 然后再修改之 在MFC中创建一个工具栏包括以下几个步骤 1 建立一个工具栏资源 构造CToolBar对象 并调用Create函数建立工具栏 并将其附加到工具栏对象 2 调用LoadToolBar函数装入工具栏资源 状态栏用来给出当前用户操作的提示信息 为用户学习使用应用程序提供方便 状态栏由CStatusBar类进行管理 要在状态栏中插入新的窗格 需要在indicator数据中插入新的字符ID 状态栏将根据这个字符串的长度来确定新窗格的默认宽度 思考与练习1 菜单有哪些常用的规则 2 菜单项的消息有哪些 3 若同一菜单在视图类和主框架窗口类中都有其消息COMMAND的处理函数 当用户选择该菜单后 会有什么结果 为什么 4 什么是快捷菜单 用程序实现通常需要哪些步骤 5 如何使一个工具按钮和某菜单项命令相结合 6 状态栏的作用是什么 状态栏的窗格分为几类 如何添加和减少响应相应的窗格 7 如何在状态栏的窗格显示文本 第4章对话框设计和编程 构建人机交互界面 提升系统交互能力 教学内容 4 1对话框基础知识 4 2对话框设计 EX04A示例程序 4 3滚动条 旋转按钮和滑动条控件 4 4无模式对话框 4 5公用对话框 4 6综合实例 宾馆管理系统的界面设计 4 7小结思考与练习 4 1对话框基础知识 4 1 1对话框的分类按照运行机制来划分 对话框可分为模式对话框和无模式对话框 1 对于模式对话框 如打开文件对话框 在该对话框被关闭之前 用户将无法在同一程序的其他地方进行工作 2 对于无模式对话框 在它仍然保留在屏幕上的同时 用户还可以在应用程序的其它窗口中进行工作 MicrosoftWord中的 查找与替换 对话框就是无模式对话框的一个很好的例子 在该对话框打开的同时 我们仍然可以对文档进行编辑 4 1对话框基础知识 4 1 2对话框的组成1 对话框资源模板对话框资源模板不但指定了对话框本身的位置 大小 风格等特征 还确定了它所包含的各种控件的位置 大小分割 排列和其他特征 实际上模板中储存了Windows用于创建或显示对话框的所有信息 2 对话框类在VisualC NET中 每个对话框都必须有一个类与之对应 由于不同的对话框行使的功能各不相同 因此一般需要从CDialog类派生一个新类以完成特定功能 CDialog中提供了多个与对话框编程密切相关的函数供程序员调用 从而大大简化了编程代码 提高效率 4 1对话框基础知识 4 1 3对话框的创建 4 2对话框设计 EX04A示例程序 4 2对话框设计 EX04A示例程序 4 2 1创建对话框资源创建对话框资源的步骤如下 1 运行应用程序向导来产生名为EX04A的单文档的应用程序 并取消 打印和打印预览 选项 其它所有选项选择默认值 2 插入对话框资源 在应用程序的设计环境中换至 资源视图 框 右击Dialog图标 在弹出的快捷菜单中单击 插入Dialog 命令 将会在Dialog节点下增加一项ID号为IDD DIALOG1的对话框模板资源 单击Dialog节点将其展开即可看到 4 2对话框设计 EX04A示例程序 4 2 1创建对话框资源创建对话框资源的步骤如下 1 运行应用程序向导来产生名为EX04A的单文档的应用程序 并取消 打印和打印预览 选项 其它所有选项选择默认值 2 插入对话框资源 在应用程序的设计环境中换至 资源视图 框 右击Dialog图标 在弹出的快捷菜单中单击 插入Dialog 命令 将会在Dialog节点下增加一项ID号为IDD DIALOG1的对话框模板资源 单击Dialog节点将其展开即可看到 4 2对话框设计 EX04A示例程序 4 2 1创建对话框资源3 设置对话框的属性 选中对话框 在 属性 框中设置对话框的标题 对话框示例 对话框ID IDD MYDIALOG和其他的一些属性 并扩大对话框的边界到合适的大小 4 2对话框设计 EX04A示例程序 4 2 1创建对话框资源4 向对话框模板中添加控件 利用控件工具箱加入每一个控件 具体方法如下 用鼠标将控件从工具箱中拖到对话框中合适的位置 释放鼠标 并设置其大小 说明 在对话框编辑界面下 可以选定一个或通过按住Ctrl键不妨用鼠标左键单击选定多个控件 在对话框中复制并粘贴 可以添加如与原来控件外观一样的新控件 4 2对话框设计 EX04A示例程序 4 2 1创建对话框资源5 设置对换框中控件的风格 具体方法如下 用鼠标选定控件 在 属性 对话框中按要求输入控件属性 如在ID框中输入标识控件的唯一ID值 在Caption中输入控件上显示的字符 Edit控件没有这一属性 Visible表示该控件在对话框创建时是否显示 Group用来控制控件分组 Disabled使控件不可用 Tabstop表示是否用Tab键选择控件 4 2对话框设计 EX04A示例程序 4 2 1创建对话框资源6 检查对话框的Tab键顺序 从对话框编辑器的 格式 菜单中选择 Tab键顺序 命令 或者同时按下Ctrl D键 此时每个控件的左上方都有一个数字 表明了当前Tab键次序 然后按图4 5所示用鼠标依次单击各个控件来设置新的Tab键顺序 最后单击对话框或者按下Enter键结束Tab键顺序设置 4 2对话框设计 EX04A示例程序 4 2 1创建对话框资源 4 2对话框设计 EX04A示例程序 4 2 2定义对话框类 4 2对话框设计 EX04A示例程序 4 2 3对话框的实现1 在视图类中添加菜单 对话框 学生问卷调查 并利用 添加事件向导 为该菜单添加消息响应函数 2 向菜单的消息响应函数中添加如下代码 CStuDlgdlg dlg DoModal 显示对话框3 在视图类的实现文件 cpp 中加入对话框类的包含文件 include StuDlg h 4 编译和测试该应用程序 当单击菜单 对话框 的 学生问卷调查 命令将弹出学生问卷调查对话框 4 2对话框设计 EX04A示例程序 4 2 4对话框程序的完善1 为对话框类加入与控件相对应的成员变量对话框的主要功能是通过所包含的控件进行数据的输入和输出 要使对话框能与程序通讯 还需给对话框类增加数据成员 以保存各控件的初始值 并从控件读取数据 与控件对应的成员变量既可以是一个数据变量 也可以是一个控件对象 这将由具体需要来确定 如果是需要交换的控件 则定义对应的数据变量 如果需要在程序中对控件进行控制 则定义对应的对象 例如 编辑框指定一个CEdit对象 通过CEdit对象 程序员可以控制控件的行为 4 2对话框设计 EX04A示例程序 4 2对话框设计 EX04A示例程序 4 2 4对话框程序的完善2 数据交换和检验对话框程序运行时 用户更改控件属性 如在编辑框中输入文字或改变复选框的选中状态时 MFC会修改对应控件变量的值 这个过程是通过MFC为对话框类自动添加的成员函数DoDataExchange 实现的 称为对话框数据交换和检验机制 控件和控件变量之间的数据交换并非自动完成的 而是需要调用CDialog UpdateData 函数才能实现从控件到控件变量或者从控件变量到控件的数据传送 CDialog UpdateData 函数的原型为 BOOLUpdateData BOOLbSaveAndValidate TRUE bSaveAndValidate参数用于指定数据的传输方向 TRUE表示将数据从控件传送给变量 FALSE则表示将数据从变量传给控件 4 2对话框设计 EX04A示例程序 4 2 4对话框程序的完善3 为对话框类添加控件通知消息的处理函数 1 对CDialog的OnInitDialog函数进行重写 以实现对话框控件的初始化 具体方法如下 将工作区视图切换到 类视图 并选中对话框类CStuDlg 在该类的属性对话框中用鼠标单击 重写 图标 添加OnInitDialog函数 如图4 8所示 4 2对话框设计 EX04A示例程序 4 2 4对话框程序的完善3 为对话框类添加控件通知消息的处理函数 2 利用属性对话框为省份组合框添加事件CBN SELCHANGE的控制函数OnChangeProvice 以便能够根据选定省份向城市列表框中添加该省份所在的城市 3 添加判定复选框是否选中的成员函数GetCheck 实现兴趣和爱好字符串 4 利用添加事件处理程序向导为 确定 按钮添加鼠标单击事件BN CLICKED的事件处理程序OnSubmission 4 2对话框设计 EX04A示例程序 4 2 5对控件进行操作的一般方法1 获取被操作控件的指针 通过指针调用其成员函数 例如 CEdit pEdit CEdit GetDlgItem IDC EDIT1 pEdit Undo 2 将被操作控件设置成控件型成员变量 通过该变量名调用控件的成员函数 如将IDC EDIT1设置成CEdit类型的成员变量m cEdit 然后就可以执行诸如 m cEdit Undo 这样的语句 3 可以调用基类CWnd成员函数 在调用被操作控件的成员函数时 除了调用它自己类中定义的成员函数外 千万别忘记它的基类CWnd中定义的成员函数 CEdit pEdit CEdit GetDlgItem IDC EDIT1 pEdit SetWindowText 本函数可以用来设置窗口的标题或控件的正文 4 3滚动条 旋转按钮和滑动条控件 4 3 1滚动条控件 4 3滚动条 旋转按钮和滑动条控件 4 3 1滚动条控件1 滚动条的基本操作在MFC的CScrollBar类中 函数SetScrollRange是用来设置滚动条的滚动范围的 其原型如下 SetScrollRange intnMinPos intnMaxPos BOOLbRedraw TRUE 在CScrollBar类中 设置滚动块位置操作是由SetScrollPos函数来完成的 其原型如下 intSetScrollPos intnPos BOOLbRedraw TRUE 与SetScrollRange和SetScrollPos相对应的两个函数是分别用来获取滚动条的当前范围以及当前滚动位置 voidGetScrollRange LPINTlpMinPos LPINTlpMa

温馨提示

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

最新文档

评论

0/150

提交评论