已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第12章VisualC 环境下Windows程序开发概述 12 1VisualC 可视化集成开发环境12 2创建 组织文件 工程和工作区12 3Windows编程基础12 4Win32开发12 5MFC编程 12 1VisualC 可视化集成开发环境 12 1 1VisualC 简介12 1 2项目开发过程12 1 3集成开发环境DeveloperStudio12 1 4常用功能键及其意义 返回首页 12 1 1VisualC 简介 1 VisualC 集成开发环境 IDE 集成开发环境 IDE 是一个将程序编辑器 编译器 调试工具和其他建立应用程序的工具集成在一起的用于开发应用程序的软件系统 2 向导 Wizard 向导是一个通过一步步的帮助引导你工作的工具 DeveloperStudio中包含三个向导 3 MFC库库 library 是可以重复使用的源代码和目标代码的集合 MFC MicrosoftFundamentalClasses 是VisualC 开发环境所带的类库 在该类库中提供了大量的类 可以帮助开发人员快速建立应用程序 返回本节 12 1 2项目开发过程 一个用C 开发项目的通用开发过程如图12 1所示 建立一个项目的第一步是利用编辑器建立程序代码文件 包括头文件 代码文件 资源文件等 然后 启动编译程序 编译程序首先调用预处理程序处理程序中的预处理命令 如 include define等 经过预处理程序处理的代码将作为编译程序的输入 编译对用户程序进行词法和语法分析 建立目标文件 文件中包括机器代码 连接指令 外部引用以及从该源文件中产生的函数和数据名 此后 连接程序将所有的目标代码和用到的静态连接库的代码连接起来 为所有的外部变量和函数找到其提供地点 最后产生一个可执行文件 一般有一个makefile文件来协调各个部分产生可执行文件 返回本节 12 1 3集成开发环境DeveloperStudio 1 进入DeveloperStudio2 DeveloperStudio的界面3 获得帮助信息4 VisualC 的编辑器 图12 2DeveloperStudio界面 DeveloperStudio它具有以下特点 1 自动语法 2 自动缩进 3 参数帮助 4 集成的关键字帮助 5 拖放编辑 6 自动错误定位 返回本节 12 1 4常用功能键及其意义 表12 1常用功能键 返回本节 12 2创建 组织文件 工程和工作区 12 2 1新建工程12 2 2新建工作区12 2 3增加已有文件到工程中12 2 4打开工作区12 2 5设置当前工程 返回首页 12 2 1新建工程 项目工作区是一个包含用户的所有相关项目和配置的实体 工程定义为一个配置和一组文件 用以生成最终的程序或二进制文件 一个项目工作区可以包含多个工程 这些工程既可以是同一类型的工程 也可以是不同类型的工程 如VisualC 和VisualJ 工程 工作区现在以 dsw为后缀名 以前为 mdp 项目文件现在以 dsp 以前为 mak 为后缀名 项目工作区如图12 3所示 图12 3项目工作区 要新建一个工程 可以 1 在File菜单上 单击New 选择Projects标签 2 从列表中选择项目类型 3 单击CreateNewWorkspace 新建工作区 或AddtoCurrentWorkspace 加入到当前工作区中 4 要使新工程为子工程 可以选择Dependencyof检查框 并从列表中选择一个工程 5 在ProjectName框中 输入新工程名 确保该名字必须与工作区中的别的工程名字不重名 6 在Location框中 指定工程存放的目录 可以直接输入路径名 也可以单击旁边的Browse按钮 浏览选择一个路径 7 单击Platform框中的相应检查框 指定工程的开发平台 返回本节 12 2 2新建工作区 要创建一个空的工作区 可以 1 在File菜单上 单击New 2 在随后弹出的对话框上 单击Workspace标签 3 从类型列表中选择BlankWorkspace 4 在WorkspaceName框中输入名字 注意名字不能与它将要包含的工程同名 5 在Location框中指定存放工作区文件的目录 6 单击OK 返回本节 12 2 3增加已有文件到工程中 1 打开包含目标工程的项目工作区文件 2 在Project菜单上 单击AddtoProject 然后单击Files 3 在InsertFilesintoProject对话框中 浏览并定位要加入到工程中的文件名 然后选择它们 4 从InsertInto中选择工程名字 然后单击OK 返回本节 12 2 4打开工作区 选择File OpenWorkspace 指定要打开的工作区 或选择File RecentWorkspaces 从最近打开过的工作区列表中选择一个 返回本节 12 2 5设置当前工程 选择ProjectSetting 可以为当前工程设置编译 链接和C C 等各种选项 返回本节 12 3Windows编程基础 12 3 1WindowsAPI12 3 2Windows基础12 3 3Windows消息映射和处理 返回首页 12 3 1WindowsAPI 1 WindowsAPI的定义WindowsAPI是应用程序编程接口 ApplicationProgrammingInterface 的英文缩写 它是大量函数加上数字常量 宏 结构 类型以及其他相关项的集合 2 WindowsAPI函数的分类根据WindowsAPI函数的功能 可以将其分为三类 1 窗口管理函数 用以实现窗口的创建 移动和修改功能 2 图形设备 GUI 函数 用以实现与设备无关的图形操作功能 3 系统服务函数 用以实现与操作系统有关的多种功能 返回本节 12 3 2Windows基础 1 事件事件以如下三种方式产生 1 通过输入设备 如键盘和鼠标 2 通过屏幕上的可视对象 如菜单 工具栏按钮 滚动条和对话框上的控件 3 来自Windows内部 2 消息但Windows捕获一个事件后 它会编写一条消息 并将相关信息放入一个数据结构中 然后将包含此数据结构的消息发送给需要此消息的程序 Windows消息是在Windows文件中用宏定义的常数 消息常数名通常以WM开头 格式为WM XXX 3 绘图及设备环境Windows具有图形用户界面 GUI 它包括菜单 工具栏 滚动条和对话框中的按钮等元素 4 对象与句柄对设备环境的访问是通过Windows返回的句柄进行的 5 坐标系要为绘制和其他任务指定位置 需要坐标系统 Windows提供了8种不同的坐标系 返回本节 12 3 3Windows消息映射和处理 开始执行在Windows中 管理消息的方式通常是这样的 当发生某个消息后 该消息进入消息队列 操作系统根据消息提供的信息决定由哪个应用程序来处理 该应用程序依照一定的方式查找应用程序各个类的消息映射 一组宏 这些宏用来确定某个消息及相应的处理程序的对应关系 找到处理程序 然后由处理程序执行 图12 4是Windows程序和Windows消息的基本流程 图12 4Windows程序和Windows消息处理的基本流程 Windows程序要处理的消息种类如下 1 Windows消息 该类消息以WM 开头 WM COMMAND例外 通常由窗口和视图来处理 2 由控件和其他子窗口发送给父窗口的WM COMMAND消息 这些消息中包括EN CHANGE通知码 3 来自于用户界面对象的WM COMMAND消息 这些用户界面对象包括菜单 工具栏按钮和快捷键 返回本节 12 4Win32开发 12 4 1抢先式多任务和多线程12 4 2连续的地址空间和先进的内存管理12 4 3内存映射文件12 4 4Win32s Windows3 x对Win32API的支持12 4 5Win32编程基础 返回首页 Win32可以应用于特定的操作系统 这种系统可以直接控制和处理PC硬件资源 而不必象Win16API那样依赖于MS DOS系统服务 然而 Win32不是简单的由Win16从16位到32位的升级 更重要的在于它支持 1 高性能的抢先式多任务和多线程 2 连续的32位地址空间和先进的内存管理 3 对所有的可为进程共享的对象 解决了它的安全性问题 4 内存映射文件 12 4 1抢先式多任务和多线程 Windows是一个多任务操作系统 它提供了一次运行多个应用程序的能力 Windows3 x的多任务是一种由协作 软件方式产生的有限的非抢先式的多任务 Windows95的多任务是一种抢先式多任务 在抢先式多任务操作系统中 系统在运行的所有进程之间对CPU时间进行共享 从而保证每个进程都能频繁的访问处理器 并且实现指令的连续执行 这样 每个Win32进程都需要分配一个优先级 系统调度程序利用这种优先级来决定哪一时刻 一个线程处于以下三种状态之一 正在执行 挂起 准备运行 在单处理器环境下 如Windows95 同一时刻只能运行一个线程 为了在Win32中支持多线程进程结构 Win32在原来Win16基础上增加了 1 对进程以及线程创建 操纵的支持 2 对一个进程内线程之间的同步和同步对象的支持 3 一个统一的共享机制 返回本节 12 4 2连续的地址空间和先进的内存管理 1 申请一块可移动的内存块 2 锁定该内存块 因为Windows引入了虚拟内存管理 可以把内存块移动到硬盘交换文件中 所以在使用内存块之前 必须将它锁定在真正的内存RAM之中 也就是告诉操作系统 现在这块内存暂时由应用程序来管理 3 对该内存块进行各种操作 如复制数据到内存块 4 解锁内存 应用程序将对该内存的控制交予Windows 下面给出一个程序片段 来说明内存管理函数的用法 HGLOBALmemHandle 内存句柄charfar lpMem 假设长度为memLenmemHandle GlobalAlloc GHND memLen 1 申请内存块 此处未做返回结果检查 事实上 申请内存有时会失败memcpy lpMem string textLen 拷贝数据 其中string为一字符串变量 textLen 是这个字符串的长度GlobalUnlock memHandle 解锁内存 GlobalFree HGLOBAL memHandle 释放内存 返回本节 12 4 3内存映射文件 内存映射文件是由一个文件到一块内存的映射 Win32提供了允许应用程序把文件映射到一个进程的函数 CreateFileMapping 这样 文件内的数据就可以用内存读 写指令来访问 而不是用ReadFile和WriteFile这样的I O系统函数 从而提高了文件存取速度 这种函数最适用于需要读取文件并且对文件内包含的信息做语法分析的应用程序 如对输入文件进行语法分析的彩色语法编辑器 编译器等 返回本节 12 4 4Win32s Windows3 x对Win32API的支持 Win32s与Win32是有区别的 Win32s的s的含义是指子集 subset 运行在Windows3 x Win32s系统上的Win32程序支持32位指针和32位寄存器 只需要在系统调用之前稍作形式替换 Win32s子集同Win32相比 不支持多线程 高级图形API 异步文件I O Unicode和安全性 而且它是运行于16位的Windows系统上的 但是同Win16相比 有它的优越之处 目前在16位Windows程序开发方面有相当的潜力 返回本节 12 4 5Win32编程基础 Win32数据类型这里的数据类型指的是一些关键字 这些关键字定义了Win32中的函数中的有关参数和返回值的大小和意义 这里需要解释一下的是句柄 句柄是Windows编程的一个关键性的概念 编写Windows应用程序总是要和各种句柄打交道 所谓句柄 就是一个惟一的数 用以标识许多不同的对象类型 如窗口 菜单 内存 画笔 画刷和电话线路等 由于Windows是一个多任务操作系统 它可以同时运行多个程序或一个程序的多个副本 Windows不仅使用句柄来管理实例 也用它来管理窗口 位图 字体 元文件和图标等系统资源 Win32常用的数据类型有 返回本节 12 5MFC编程 12 5 1MFC类库概念和组成12 5 2MFC应用程序框架12 5 3MFC的优点12 5 4MFC对消息的管理 返回首页 12 5 1MFC类库概念和组成 类库是一个可以在应用中使用的相互关联的C 类的集合 Microsoft提供了一个基础类库MFC 其中包含用来开发C 和C Windows应用程序的一组类 基础类库的核心是以C 形式封装了大部分的WindowsAPI 类库表示窗口 对话框 设备上下文 公共GDI对象如画笔 调色板 控制框和其他标准的Windows部件 这些类提供了一个面向Windows中结构的简单的C 成员函数的接口 MFC可分为两个主要部分 基础类 宏和全程函数 基础类 MFC中的类按功能来分可划分为以下几类 基类 应用程序框架类 应用程序类 命令相关类 文档 视图类 线程类 可视对象类 窗口类 视图类 对话框类 属性表 控制类 菜单类 设备描述表 绘画对象类 通用类 文件 诊断 异常 收集 模板收集 其他支持类 OLE2类 OLE基类 OLE可视编辑包装程序类 OLE可视编辑服务器程序类 OLE数据传输类 OLE对话框类 其他OLE类和数据库类 宏和全程函数 Microsoft基本宏和全程函数提供以下功能 数据类型 运行时刻对象类型服务 诊断服务 异常处理 CString格式化及信息框显示 消息映射 应用消息和管理 对象连接和嵌入 OLE 服务 标准命令和WindowsIDs 约定 全程函数以 Afx 为前缀 所有全程变量都是以 Afx 为前缀 宏不带任何特别前缀 但是全部大写 例12 1 CObject类的定义 classCObjectistherootofallcompliantobjectsclassCObject public Objectmodel types destruction allocation virtualCRuntimeClass GetRuntimeClass const virtual CObject virtualdestructorsarenecessary Diagnosticallocationsvoid PASCALoperatornew size tnSize void PASCALoperatornew size t void p voidPASCALoperatordelete void p ifdefined DEBUG endif Disablethecopyconstructorandassignmentbydefaultsoyouwillget compilererrorsinsteadofunexpectedbehaviourifyoupassobjects byvalueorassignobjects protected CObject private CObject constCObject noimplementation Attributes public BOOLIsSerializable const BOOLIsKindOf constCRuntimeClass pClass const OverridablesvirtualvoidSerialize CArchive CObject类为派生类提供了下述服务 1 对象诊断 2 运行时访问类的信息 3 对象持续性 下面举个具体的例子来说明MFC所提供的应用程序框架 程序如例12 2所示 例12 2 应用程序框架示例 include derivedanapplicationclassclassCMinMFCApp publicCWinApp public BOOLInitInstance DerivethemainwindowclassclassCMainWindow publicCFrameWnd public CMainWindow DECLARE MESSAGE MAP BEGIN MESSAGE MAP CMainWindow CFrameWnd END MESSAGE MAP CMinMFCAppMemberFunctions BOOLCMinMFCApp InitInstance m pMainWnd newCMainWindow m pMainWnd ShowWindow m nCmdShow m pMainWnd UpdateWindow returnTRUE CMainWindowmemberfunctions CMainWindow CMainWindow constructor Create NULL MinMFCApplication WS OVERLAPPEDWINDOW rectDefault NULL NULL aninstanceoftypeCMinMFCApp CMinMFCAppThisApp 返回本节 12 5 2MFC应用程序框架 MFCAppWizard生成的应用程序包含以下要素 1 WinMain 函数 Windows要求应用程序必须有一个WinMain 函数 2 应用程序类CMyFirstApp 该类的每一个对象代表一个应用程序 3 应用程序启动 4 成员函数CMyFirstApp InitInstance 5 成员函数CWinApp Run 6 CMainFrame类 7 文档与视图类 8 关闭应用程序 返回本节 12 5 3MFC的优点 MicrosoftMFC具有以下不同于其他类库的优势 完全支持Windows所有的函数 控件 消息 GDI基本图形函数 菜单及对话框 使用与传统的WindowsAPI同样的命名规则 即匈牙利命名法 进行消息处理时 不使用易产生错误的switch case语句 所有消息映射到类的成员函数 这种直接消息到方法的映射对所有的消息都适用 返回本节 12 5 4MFC对消息的管理 1 MFC对消息的处理2 消息的发送 1 MFC对消息的处理 MFC不使用用C语言编写Windows程序时用的易产生错误的switch case语句 而采用一种消息映射机制来决定如何处理特定的消息 这种消息映射机制包括一组宏 用于标识消息处理函数 映射类成员函数和对应的消息等 例12 3 消息处理函数例子 classCMainFrame CFrameWnd public CMainFrame protected AFX MSG CMainFrame afx msgintOnCreate LPCREATESTRUCTlpCreateStruct afx msgvoidOnEditCopy afx msgvoidOnClose AFX MSGDECLARE MESSAGE MAP 例12 4 使用用户自定义消息 include defineCM APPLE WM USER 0 defineCM ORANGE WM USER 1 classCMainFrame CFrameWnd public CMainFrame protected afx msgintOnCreate LPCREATESTRUCTlpCreat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 景观灯采购合同
- 二年级道德与法治上册 我上二年级了 第2课《我为集体添光彩》教案 北师大版
- 2024-2025学年高中物理 第二章 原子结构 3 光谱 氢原子光谱教案1 教科版选修3-5
- 2024年学年八年级语文上册 第五单元 心灵诗语 第18课《采莲曲》教案 沪教版五四制
- 2023三年级英语上册 Unit 2 Colours Part B 第二课时教案 人教PEP
- 八年级政治下册 第五单元 我是中国公民 5.1 我们都是公民情境探究型教案 粤教版
- 2024-2025学年高中物理 第四章 机械能和能源 5 机械能守恒定律教案1 教科版必修2
- 高考地理一轮复习第十九章环境安全与国家安全第一节环境安全、全球气候与国家安全课件
- 最简单的居间合同(2篇)
- 汉子人教版课件
- 排烟机房管理制度
- 急性左心衰的急救处理
- 关于课程与教材建设的研究报告
- 超声药物透入疗法对临床常见痛症治疗课件
- 阿基米德-人物介绍-最终最牛版
- 2022年全国高考体育单招考试语文押题卷模拟试题一(含答案解析)
- 大连理工大学《877经济学原理》历年考研真题汇编(含部分答案)合集
- 浙江省金华市兰溪市2023-2024学年五年级上学期期中语文试卷
- 第10课 多民族政权并立与元朝的统一【知识精研】 《中国历史》 中职中专 高效课堂课件
- 10人小公司规章制度
- 防腐木地板施工技术
评论
0/150
提交评论