2 网络编程开发工具.ppt_第1页
2 网络编程开发工具.ppt_第2页
2 网络编程开发工具.ppt_第3页
2 网络编程开发工具.ppt_第4页
2 网络编程开发工具.ppt_第5页
已阅读5页,还剩144页未读 继续免费阅读

下载本文档

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

文档简介

2网络编程开发工具 VisualC 2 1VisualC 简介2 2IDE和开发流程2 3Windows编程基础2 4课后练习 2 1VisualC 简介 发展历史开发功能安装测试SDK和MFC 发展历史 VisualC 1 0 MFC2 0 1992年VisualC 1 5 MFC2 5 VisualC 2 0 MFC3 0 VisualC 4 0 MFC4 0 1995年VisualC 5 0 MFC5 0 VisualC 6 0 MFC6 0 1998年 VisualC NET2002 MFC7 0 VC7 0VisualC NET2003 MFC7 1 VC7 1VisualC 2005 MFC8 0 VC8 0VisualC 2008 MFC9 0 VC9 0VisualC 2010 MFC10 0 VC10 0 VisualC 6 0版本 Professional 基本开发任务Enterprise 企业开发 VisualC 2008版本 Express 简化版 免费 不限商业用 Standard 标准版Professional 专业版TeamSystem 团队系统版 VisualC 2010版本 Professional 基本开发任务Premium 功能更强工具集 可简化开发Ultimate 综合性应用程序生命周期管理工具套件VisualStudioTestProfessional2010 简化测试规划和手动测试执行过程 配套 开发功能 几乎所有世界级的软件 从业界领先的Web浏览器到面向任务的企业应用 都可以使用MicrosoftVisualC 开发系统来开发的 要用C 来开发Windows和Web上的高性能应用程序 VisualC 是效率最高的首选工具 编译系统驱动程序网络程序数据库系统程序游戏程序文档处理软件 安装测试 课后交流 安装文件安装过程功能测试 SDK和MFC SDK微软每推出一个重要的windows版本 一般都会同时推出一个SDK SoftwareDevelopmentKit SDK包含了开发该windows版本所需的windows函数和常数定义 API函数说明文档 相关工具和示例 SDK一般使用C语言 但不包括编译器 高版本VC 包括了SDK所有的头文件 帮助 示例和工具 不需要再安装SDK MFCMFC MicrosoftFoundationClasses 是一个微软公司提供的类库 classlibraries 以C 类的形式封装了Windows的API 并且包含一个应用程序框架 以减少应用程序开发人员的工作量 其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类 VC编写windows程序的两种方式 windowsc方式 SDK SDK编程就是直接用windowsAPI进行编程 API由上千个API函数组成 win95中有两千多个 C 方式 MFC MFC是SDKAPI的封装 结合面向对象的继承 多态组成一个个类 共有一百多个类组成 MFC类的基本层次结构 2 2IDE和开发流程 可视化的集成开发环境 IDE 开发环境项目工作区资源编辑器联机帮助用VC开发程序过程 控制台程序 VC项目类型 可视化的集成开发环境 VisualC 是可视化的集成开发环境集成开发环境 IDE VisualC 是微软公司的VisualStudio开发工具箱中的C 程序开发包 它包括 编辑器 C C 编译器 连接器 调试器 工具库 例子和创建Windows应用程序所需要的帮助文档等内容 利用计算机图形技术和方法实现可视化 开发环境 Edit菜单 File菜单 View菜单 Insert菜单 菜单简介 Project菜单 Build菜单 Tools菜单 Windows菜单 1 VC 的菜单栏 File菜单 断点作用 中断程序的执行过程 以便检查程序代码 变量和寄存器值 用来设置删除和查看断点 2 VC 的菜单栏 Edit菜单 位置断点通常在源代码的指定行 函数的开始或指定的内存地址处设置 当程序执行到指定位置时 位置断点将中断程序的执行 数据断点是在变量或表达式上设置 当变量或表达式的值改变时 数据断点将中断程序的执行 消息断点是在窗口函数WndProc上设置 当接收到指定的消息时 消息断点将中断程序的执行 提供有效的成员名 在View菜单中可以 改变窗口改变工具栏的显示方式检查源代码激活调试等 a ClassWizard选项 3 VC 的菜单栏 View菜单 a 1 ClassWizard中的MessageMaps选项卡 为窗口 对话框 控件 菜单选项和加速键等对象映射消息 创建或删除消息处理函数 查看消息处理函数的代码 a 2 MemberVariables选项卡 定义成员变量用于自动初始化其中 ControlIDs是映射到成员变量的控件ID值Type是成员变量的类型Member是成员变量名 a 3 Automation选项卡 此选项卡主要将在创建新类时 添加自动化方法和属性 a 4 ClassInfo选项卡 提供有关类的信息 b ResourceSymbols选项该选项将打开资源符号浏览器 从中可以浏览资源编辑符号 资源编辑符号是映射到整数值上的一串字符 相当于资源的一个代号 在同一个程序中 资源编辑符号不能重复 c ResourceIncludes选项 该对话框包含资源符号头文件名和预处理指令 a NewClass选项该选项用来创建新类并添加到项目中 4 VC 的菜单栏 Insert菜单 使用Project可以创建 修改和存储正在编辑的工程文件 工程文件组合了一个应用程序的所有源文件的组成部分 工程文件包含在扩展名为 MAK的文件中 5 VC 的菜单栏 Project菜单 b AddToProject选项选择该选项将打开一个级联子菜单通过级联子菜单 可以把文件 文件夹 数据链接以及VC组件或控件添加到当前工程文件中 在该子菜单中可以进行如下操作 1 New 创建新的文件 2 NewFolder 插入新的文件夹 3 Files 插入已有文件 4 DataConnection 添加数据链接 5 ComponentandControls 通过该项将可以插入VC组件或者已注册的ActiveX控件 插入时相当于插入相关的头文件 h文件 和实现文件 cpp文件 并且更新工作区窗口的信息 a SetActiveProject选项设定指定的项目为工作区的活动项目 c Settings选项选择该选项将弹出ProjectSettings对话框 其中General选项卡用来设置基础类用法和目录 指出应用程序与MFC的链接方式 指出所建立的应用程序的默认位置为Debug目录 输出文件的位置 Build菜单用于编译 建立和执行应用程序 6 VC 的菜单栏 Build菜单 e StartDebug选项 从当前语句开始执行程序直到遇到断点或遇到程序结束 单步执行程序 并在遇到函数调用时进入函数内部再从头单步执行 使程序在运行到当前光标所在位置时停止 相当于设置一个临时断点 调试过程中直接进入到正在运行的进程中 a SourceBrowse选项编译器在建立项目时会创建与项目中每一程序文件信息有关的 SBR文件 BSCMAKE程序将这些 SBR文件汇编为单个浏览信息数据库 选择SourceBrowse将弹出浏览窗口 它显示与程序中所有符号 类 函数 数据 宏和类型 有关的信息 7 VC 的菜单栏 Tools菜单 b VisualComponentManager选项 该工具可以在某个工程中组织 寻找和插入相关组件 而且还可以识别已存在的且可利用的对象 选择该选项将弹出如图所示的窗口 在工作区中添加项目 用File Open选项可打开已存在的项目 通过New对话框的Projects选项卡创建新的项目 并选择Addtocurrentworkspace复选框 VC以项目工作区的形式来组织文件 项目和项目配置 创建新的空工作区步骤 a File New Workspaces 输入工作区名字并指定工作区目录 项目与项目工作区1 创建新的项目工作区 2 项目工作区窗口简介 在VC中 源代码或资源编辑器为了引用资源和用户自定义的其它对象 于是就引入了一种与资源一一对应的符号即资源符号 使之能够以字符串的方式被引用 资源符号是映射到整数值上的一串字符 是一种标识符 每当创建一个新的资源或资源对象时 系统就会为其提供一个默认的资源符号名称并赋一个整数值 该定义保存在resource h文件中 资源是一种界面元素 用户可以从中获得信息并在其中执行某个动作 资源及资源编辑器 输入新资源符号的名称 由于资源符号不能重复 因此应按照一种标准来定义资源符号进行符号定义 资源符号的取值范围一般为0 32767 2 资源符号定义的常用前缀 用VC开发程序过程 VisualC 程序开发步骤1 启动环境DeveloperStudio 2 创建新的程序项目 Project 3 项目中添加C 源程序等文件 4 输入编辑C 源程序等文件 5 编译 连接生成可执行程序 EXE 6 运行或测试程序 Execute C C 开发程序过程 1 编辑 编写源文件 cpp h等 2 编译 生成 obj文件 3 链接 将 obj文件与所调用的库文件链接在一起 生成 exe可执行文件 4 执行 运行所编写的程序 5 调试 跟踪调试 排除错误 1 启动VisualStudio VC 点击MicrosoftVisualC 6 0的图标过程 开始 程序 MicrosoftVisualStudio6 0 MicrosoftVisualC 6 0 图标为 进入VisualC 6 0启动的界面 VisualC 启动的界面 2 创建新的程序项目 主菜单中选择File New 2 创建新的程序项目 续 New对话框中选择Projects单击列表中的Win32Console Application 控制台应用程序 注 不同的项目类型对应于不同的应用程序 2 创建新的程序项目 续 在 Location 编辑框中键入或找到存放程序文件的目录 例如D TestVC 录入项目名称例如 Exam 2 创建新的程序项目 续 单击 OK 后 出现向导对话框 按照向导生成程序框架 这里选择项目类型 anemptyproject 单击Finish 2 创建新的程序项目 续 对话框中选OK结束配置 系统创建新程序 项目 和生成所用到的各种配置文件 3 项目中添加C 源程序文件 主菜单中选择File New New对话框中选择File 添加各种文件 主要添加C 源文件 此时单击 C SourceFile 选中AddtoProject复选框 在Filename编辑框编辑框中键入文件名 如Hello 系统将自动创建并打开新文件Hello cpp 4 输入编辑C 源程序文件 打开的文件中输入以下内容 进行编辑 includeintmain cout hello endl return0 单击工具栏中的 save 图标 或选择File Save来保存文件 有自动保存功能 5 编译连接生成可执行程序 选择主菜单的Build CompileHello cpp或者选择图标来编译文件 若输入的内容没有错误 那么 输出窗口 Output 将会显示 hello obj 0error s 0warning s 如在编译时有错误或警告 表明源文件出现错误 应改正之 5 编译连接生成可执行程序 选择主菜单的Build BuildHello exe来或者选择工具条上的图标进行连接 若连接正确 则在项目文件夹的Debug下得到一个可执行程序hello exe 且在屏幕下方的输出窗口将会显示 hello exe 0error s 0warning s 6 运行可执行程序 选择菜单Build Executehello exe 或者Ctrl F5或 在开发环境中执行程序 在console类型的应用程序中会出现一个类似于DOS的窗口 显示一行hello紧接着系统提示显示Pressanykeytocontinue 按任意键 窗口关闭 退回到VisualC 开发环境 VC项目类型 2 3Windows编程基础 基本概念 Windows程序运行机制 Windows编程常用数据结构命名规则 匈牙利命名法 自学 Windows程序结构 基本概念 窗口和程序进程与线程句柄API与SDK事件及消息 窗口和程序 窗口是Windows本身以及Windows环境下的应用程序的基本界面单位 很多人都误以为只有具有标题栏 状态栏 最大化 最小化按钮这样标准的方框才叫窗口 其实窗口的概念很广 例如按钮和对话框等也是窗口 只不过是一种特殊的窗口 窗口 窗口 Window 由句柄唯一标识 Windows程序的基本操作单元 系统管理应用程序的基本单位 应用程序与用户交互的接口环境 应用程序的运行就是窗口内部 窗口之间 窗口与系统之间数据处理与交换的过程 一个Windows程序至少有一个窗口 窗口的组成 应用程序的主窗口 窗口 窗口 窗口 窗口 窗口 窗口的组成 窗口是屏幕上的一个矩形区域应用程序在该区域中显示数据并等待鼠标点击Windows应用系统的用户界面可以包含许多窗口每个窗口都有不同的特点 但都是互相联系的 三种类型的窗口 在这么多窗口中 基本类型只有三种 重叠 Overlapped 窗口弹出 Popup 窗口子 Child 窗口在它们之间并没有太多内在的差异 但是使用不同的窗口风格 它们的外观是不同的 三种类型的窗口 重叠窗口通常用于建立应用程序主窗口 事实上 有时也叫做 主 窗口或者 框架 窗口弹出窗口通常以对话框和消息框的形式与用户对话子窗口通常用在视图 View 中 如在文本编辑器中的文本显示 也用在控件中 如在对话框中的OK按钮而对那些看起来像按钮或控件的子窗口 也称为 控件 窗口 三种窗口组成的应用程序 属于桌面的重叠窗口 也称主窗口 主窗口的子窗口 主窗口的子窗口 主窗口的弹出窗口 弹出窗口的子窗口 三种类型的窗口 主要区别重叠窗口和弹出窗口弹出窗口出现时可以没有标题 也称为标题栏 子窗口与重叠窗口 弹出窗口子窗口只能出现在另一个窗口中 并且子窗口的任何多余部分都被该窗口移去或剪切掉另外 子窗口是唯一不能有菜单条的窗口 程序 通常说的程序都是指一个能让计算机识别的文件 接触得最多的是以exe或者com作为扩展名的文件 进程与线程 进程就是应用程序的执行实例 或称一个执行程序 进程是程序动态的描述 一个以exe作为扩展名的文件 在没有被执行的时候称之为应用程序 当用鼠标双击执行以后 就被操作系统作为一个进程执行了 当关机或者在任务栏的图标上单击鼠标右键选 退出 时 进程便消亡 彻底结束了生命 进程经历了由 创建 到 消亡 的生命期 而程序自始至终存在于你的硬盘上 不管计算机是否启动 Windows任务管理器 进程 线程 线程是进程的一个执行单元 同一个进程中的各个线程对应于一组CPU指令 一组CPU寄存器以及一个堆栈 进程本来就具有动态的含义 是通过线程来体现的 Windows应用程序 操作系统 计算机硬件之间的相互关系 向下的箭头1表示操作系统能够操纵输出设备 以执行特定的功能 如让声卡发出声音 让显卡画出图形 向上的箭头2表示操作系统能够感知输入设备状态的变化 如鼠标移动 键盘按下 并且能够知道鼠标移动的具体位置 键盘按下的哪个字符 这就是操作系统和计算机硬件之间的交互关系 应用程序开发者通常不需知道其具体实现细节 API与SDK API是英文ApplicationProgrammingInterface的缩写 意思是 应用程序接口 泛指系统为应用程序提供的一系列函数接口在编程时可以直接调用 而不必知道其内部实现的过程 只知道它的原型和返回值就可以了SDK是英文SoftwareDevelopmentKit的缩写 意思是 软件开发工具包 微软提供了许多专门的SDK开发包 比如DirectX开发包和语音识别开发包等 关于API 向下的箭头 表示应用程序可以通知操作系统执行某个具体的动作 如操作系统能够控制声卡发出声音 但它并不知道应该何时发出何种声音 需要应用程序告诉操作系统该发出什么样的声音 关于API 应用程序是如何通知操作系统执行某个功能的呢 在应用程序中要完成某个功能 都是以函数调用的形式实现的 同样 应用程序也是以函数调用的方式来通知操作系统执行相应的功能的 操作系统所能够完成的每一个特殊功能通常都有一个函数与其对应 也就是说 操作系统把它所能够完成的功能以函数的形式提供给应用程序使用 应用程序对这些函数的调用就叫做系统调用 这些函数的集合就是Windows操作系统提供给应用程序编程的接口WindowsAPI 如CreateWindow就是一个API函数 应用程序中调用这个函数 操作系统就会按照该函数提供的参数信息产生一个相应的窗口 事件及消息 事件 Event 是对计算机操作的动作 每个事件对应一个消息 即每个事件发生的效果是产生消息 消息 Message 是描述事件发生的信息 比如 按键事件 按下键的消息 字符消息和键弹起的消息程序执行的顺序取决于事件发生的顺序 但是消息的产生并不要求有次序之分 事件驱动编程方法 事件驱动编程方法对于编写交互式程序很有用处 它避免了死板的操作模式 Windows程序设计是针对事件或消息的处理进行 消息 Message 向上的箭头 表示操作系统能够将输入设备的变化上传给应用程序 如用户在某个程序活动时按了一下键盘 操作系统马上能够感知到这一事件 并且能够知道用户按下的是哪一个键 操作系统并不决定对这一事件如何作出反应 而是将这一事件转交给应用程序 由应用程序决定如何对这一事件作出反应 好比有个蚊子叮了我们一口 我们的神经末梢 相当于操作系统 马上感知到这一事件 并传递给了我们的大脑 相当于应用程序 我们的大脑最终决定如何对这一事件作出反应 如将蚊子赶走 或是将蚊子拍死 对事件作出反应的过程就是消息响应 消息 Message 消息是应用程序和计算机交互的途径 在计算机上几乎做每一个动作都会产生一个消息 鼠标被移动会产生WM MOUSEMOVE消息 鼠标左键被按下会产生WM LBUTTONDOWN的消息 鼠标右键按下便产生WM RBUTTONDOWN消息等 消息的功能 功能帮助Windows实现多任务 通知应用程序某一事件已经发生 各应用程序给予响应 消息的组成 操作系统是怎样将感知到的事件传递给应用程序呢 这是通过消息机制 Message 来实现的 操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序 参看MSDN 消息的组成 消息号 字参数 长字参数消息号事先定义好 字参数 wParam 长字参数 lParam 提供附加信息 含义和具体消息号相关 典型的消息结构 typedefstructtagMSG HWNDhwnd 接收窗口UINTmessage 消息标识WPARAMwParam 附加信息LPARAMlParam 附加信息DWORDtime 发送时间POINTpt 鼠标位置 MSG PMSG vc include wtypes h 句柄 HANDLE 句柄 HANDLE 资源的标识 操作系统要管理和操作这些资源 都是通过句柄来找到对应的资源 按资源的类型 又可将句柄细分成图标句柄 HICON 光标句柄 HCURSOR 窗口句柄 HWND 应用程序实例句柄 HINSTANCE 等等各种类型的句柄 操作系统给每一个窗口指定的一个唯一的标识号即窗口句柄 句柄 句柄是一个指针通过句柄就可以控制该句柄指向的对象编写程序总是要和各种句柄打交道的句柄 handle 是一个4字节长的整数值是系统用于表示应用程序中不同的对象和同类对象中不同的实例 如一个窗口 按钮 图标 菜单等这些东西在系统中被视为不同类型的对象 用不同的句柄将他们区分开来 常用的句柄 从变量的类型区分变量的用途 intx y x 30 y 30 x和y既可以用来表示坐标点 也可以用来表示宽度和高度 还可以用来表示身高和体重 typedefintWIDTHtypedefintHEIGHTWIDTHx HEIGHTy 好处 我们从变量的类型上就可以知道x和y是用来表示宽度和高度 消息驱动机制 DOS程序是通过调用系统的函数来获得用户输入 Windows程序则是通过操作系统发送的消息来处理用户输入在Windows操作系统环境内系统产生的动作用户运行应用程序产生的动作 事件产生的消息 消息驱动机制 Windows程序接收消息分发消息处理消息 与用户进行交互 消息的产生 用户产生消息Windows本身产生消息应用程序本身产生消息其他应用程序产生消息 消息的分类 窗口管理消息 初始化消息 输入消息 系统消息等 VC定义不同的前缀用于消息宏定义识别消息类型 BM按钮消息CB组合框消息DM下压按钮控制消息EM编辑框消息LB列表框消息WM窗口消息 不同消息类型的取值范围 Windows应用程序常用消息 WM LBUTTONDOWNWM KEYDOWNWM CREATWM CLOSEWM DISTORYWM QUITWM PAINTWM CHARWM COMMAND Windows应用程序常用消息 窗口管理消息初始化消息输入消息系统消息剪贴板消息控制处理消息 控制通知消息滚动条通知消息非用户区消息MDI消息DDE消息应用程序自定义的消息 消息的传递 Windows系统有一个存放消息的队列 每个应用程序也有一个消息队列 Windows系统先将收到的消息存放在系统队列中 然后再分发到相应的应用程序队列中 应用程序则从自身的队列中获取消息并进行处理 消息的传递 事件 事件 事件 系统消息队列 应用程序队列 应用程序队列 应用程序队列 应用程序 应用程序 应用程序 一个应用程序队列 Windows InputMessage SystemQueue ApplicationQueue WinMain MessageLoop WindowsFunction 两个应用程序队列 Windows InputMessage SystemQueue ApplicationQueue ApplicationQueue WinMain MesaageLoop WindowsFunction WinMain MesaageLoop WindowsFunction 结束一个应用程序 WM DESTROY Windows WM QUIT ApplicationQueue WindowsFunction Application WinMain MessageLoop 创建消息循环 Windows程序至少包含两个函数 WinMain 必有且仅有一个窗口函数 每个窗口对应一个窗口函数 以响应该窗口的消息通常每个Windows应用程序至少对应一个窗口 每个窗口都要有一个窗口函数负责处理该窗口内所发生的事件 创建消息循环 While GetMessage 将消息发送给窗口过程 例程中指WndProc 何时退出 当从应用程序消息队列中检取的消息是 WM QUIT时 则退出循环 投递和发送消息 PostMessage和SendMessagePostMessage只把消息放入队列 不管其他程序是否处理都返回 然后继续执行这是个异步消息投放函数 会造成消息的滞后性SendMessage必须等待其他程序处理消息完了之后才返回 继续执行这是个同步消息投放函数 不会造成消息的滞后性但如果消息处理失败 则会造成程序停止PostMessage的返回值表示PostMessage函数执行是否正确SendMessage的返回值表示其他程序处理消息后的返回值 投递和发送消息 图示 Windows SystemQueue ApplicationQueue WinMain MesaageLoop WindowsFunction PostMessage SendMessage Application 投递和发送消息 示例 PostQuitMessage nExitCode 功能 发送WM QUIT消息给系统 以通知系统应用程序要结束 WM QUIT消息只能用PostMessage 因为该消息将导致应用程序释放消息环 也就无法返回结果 SendDlgItemMessage 功能 向对话框控件发送消息相当于先用GetDlgItem 得到控件句柄 再SendMessage 是一种组合的方便方式 Windows编程常用数据结构 匈牙利命名法 这种命名法是一位叫CharlesSimonyi的匈牙利程序员发明的 后来他在微软呆了几年 于是这种命名法就通过微软的各种产品和文档资料向世界传播开了 现在 大部分程序员不管自己使用什么软件进行开发 或多或少都使用了这种命名法 这种命名法的出发点是把变量名按 属性 类型 对象描述的顺序组合起来 以使程序员作变量时对变量的类型和其它属性有直观的了解 下面是HN变量命名规范 pfnEatApple pfn是类型描述 表示指向函数的指针 EatApple是变量对象描述 所以它表示指向EatApple函数的函数指针变量 HWNDhWnd CWnd pWnd HDLGhDlg CDialog pDlg HDChDC CDC pDC Windows程序结构 Windows编程 API MFC编程 Windows编程 API 实例创建 演示 用AppWizard创建理解程序框架添加程序代码编译运行 例Ex HelloMsg 一个最简单的Windows应用程序 includeintWINAPIWinMain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpCmdLine intnCmdShow MessageBox NULL 你好 我的VisualC 世界 问候 0 return0 Windows程序的入口函数 WinMain函数的原型如下 intWINAPIWinMain HINSTANCEhInstance 当前实例句柄HINSTANCEhPrevInstance 以前的实例句柄LPSTRlpCmdLine 指向命令行参数的指针intnCmdS 窗口的显示状态 每一个Win32应用程序都需要Windows h头文件 包含了一些Windows头文件 程序中 MessageBox是一个Win32API函数 用来弹出一个对话框窗口 显示短信息 窗口的创建 创建一个完整的窗口需要经过下面四个操作步骤 设计一个窗口类 注册窗口类 创建窗口 显示及更新窗口 设计窗口类 typedefstruct WNDCLASS UINTstyle 窗口类的类型WNDPROClpfnWndProc 过程函数intcbClsExtra intcbWndExtra HANDLEhInstance HICONhIcon HCURSORhCursor HBRUSHhbrBackground LPCTSTRlpszMenuName LPCTSTRlpszClassName WNDCLASS 窗口类的类型 在我们的程序中经常要用到一类变量 这个变量里的每一位都对应某一种特性 当该变量的某位为1时 表示有该位对应的那种特性 当该位为0时 即没有该位所对应的特性 当变量中的某几位同时为1时 就表示同时具有几种特性的组合 一个变量中的哪一位代表哪种意义 不容易记忆 所以我们经常根据特征的英文拼写的大写去定义一些宏 该宏所对应的数值中仅有与该特征相对应的那一位 bit 为1 其余的bit都为0 我们使用gotodefinition就能发现CS VREDRAW 0 x0001 CS HREDRAW 0 x0002 CS DBLCLKS 0 x0008 CS NOCLOSE 0 x0200 他们的共同点就是只有一位为1 其余位都为0 如果我们希望某一变量的数值既有CS VREDRAW特性 又有CS HREDRAW特性 我们只需使用二进制OR 操作符将他们进行或运算相组合 如style CS VREDRAW CS HREDRAW CS NOCLOSE 如果我们希望在某一变量原有的几个特征上去掉其中一个特征 用取反 之后再进行与 运算 就能够实现 如在刚才的style的基础上去掉CS NOCLOSE特征 可以用style CS NOCLOSE实现 窗口类的类型 窗口过程函数 第二个成员变量lpfnWndProc指定了这一类型窗口的过程函数 也称回调函数 回调函数的原理 当应用程序收到给某一窗口的消息时 还记得前面讲过的消息通常与窗口相关的吗 就应该调用某一函数来处理这条消息 这一调用过程不用应用程序自己来实施 而由操作系统来完成 但是回调函数本身的代码必须由应用程序自己完成 对于一条消息 操作系统到底调用应用程序中的哪个函数 回调函数 来处理呢 操作系统调用的就是接受消息的窗口所属的类型中的lpfnWndProc成员指定的函数 每一种不同类型的窗口都有自己专用的回调函数 该函数就是通过lpfnWndProc成员指定的 窗口过程函数 举例 汽车厂家生产汽车好比应用程序创建窗口 用户使用汽车好比操作系统管理窗口 某种汽车在销售前就指定好了修理站 类似回调函数 当用户的汽车出现故障后 类似窗口收到消息 汽车用户 类似操作系统 自己直接找到修理站去修理 不用厂家 类似应用程序 亲自将车送到修理站去修理 但修理站还得由厂家事先建造好 例Ex HelloWin 一个较完整的Windows应用程序 与Ex HelloMsg示例相比 Ex HelloWin要复杂的多 可以将其分是两个基本函数的程序结构 函数WndProc用来接收和处理各种不同的消息 WinMain函数通常要完成以下几步工作 定义并调用API函数RegisterClass注册应用程序的窗口类 调用相关API函数创建和显示窗口 并进行必要的初始化处理 其中 函数CreateWindow用来创建已注册窗口类的窗口 CreateWindow函数的原型 HWNDCreateWindow LPCTSTRlpClassName 已注册的窗口类名LPCTSTRlpWindowName 窗口标题DWORDdwStyle 窗口风格intx 窗口的水平位置inty 窗口的垂直位置intnWidth 窗口宽度intnHeight 窗口高度HWNDhWndParent 父窗口句柄HMENUhMenu 菜单句柄或控件标识HINSTANCEhInstance 应用程序实例句柄LPVOIDlpParam 其他窗口创建时的参数数据 创建和启动应用程序的消息循环 Windows应用程序接受各种不同的消息 Windows系统首先将消息放入消息队列中 应用程序的消息循环就是从应用程序的消息队列中消息 并将消息发送相应的客串过程函数中作进一步处理 API函数GetMessage和DispatchMessage就是起到这样的作用 如果接收到WM QUIT消息 则退出应用程序 Windows应用程序的基本流程 Windows编程特点 一个完整的Windows应用程序除了WinMain函数外 还包含用于处理用户动作和窗口消息的窗口函数 Windows应用程序具有的一些特性 消息驱动机制图形设备接口 GDI 基于资源的程序设计动态链接库 1 消息驱动机制Windows程序和控制台应用程序之间一个最根本区别 在于控制台应用程序是通过调用系统函数来获得用户输入 而Windows程序则是通过系统发送的消息来处理用户输入 2 图形设备接口 GDI Windows提供了一个抽象的接口 称为图形设备接口 GraphicalDeviceInterface GDI 使得用户直接利用系统的GDI函数就能方便实现图形和文本的输出 而不必关心与系统相连的外部设备的类型 3 基于资源的程序设计Windows应用程序包含众多图形元素 如光标 菜单 工具栏 位图 对话框等 每一个这样的资源都用相应的标识符来区分 而且Windows内部也有预定义的资源 在Windows环境下 每一个资源元素都作为一种可以装入应用程序的资源来存放 这些资源可以被编辑 修改 也可以被其他应用程序所共享 4 动态链接库动态链接库提供了一些特定结构的函数 能被应用程序在运行过程中装入和连接 多个程序可以共享同一个动态链接库 动态链接库可以提高程序模块的灵活性 Windows提供了丰富的应用程序可调用的函数 大多数用于实现其用户界面和在屏幕显示的文本和图形 都是通过动态链接库来实现的 在Windows操作系统中 最主要的DLL有KERNEL32 DLL GDI32 DLL和USER32 DLL KERNEL32 DLL用来处理存储器低层功能 任务和资源管理等Windows核心服务 GDI32 DLL提供图形设备接口 管理用户界面和图形绘制 包括Windows元文件 位图 设备描述表和字体等 USER32 DLL负责窗口的管理 包括消息 菜单 光标 计时器及其它与控制窗口显示相关的一些功能 MFC编程基础 MFC概述设计一个MFC程序理解程序代码 MFC概述 为了帮助用户处理那些经常使用且复杂繁琐的各种Windows操作 VisualC 设计了一套基础类库MFC MicrosoftFoundationLibrary MFC把传统的Windows编程规范中的大多数内容封装成为各种类 提高了编程和代码效率 MFC类的基本层次结构 设计一个MFC程序 例Ex HelloMFC 一个MFC应用程序 1 创建一个 Anemptyproject 类型的Win32Application Win32应用程序 项目Ex HelloMFC 2 选择 文件 新建 3 建立C SourceFile文件 并输入代码 4 选择 工程 设置 菜单命令 在出现的对话框中选择 General 标签 然后在 MicrosoftFoundationClasses 组合框中 选择 UseMFCinaSharedDLL 单击 OK 按钮 5 程序运行后 单击鼠标左键 就会弹出一个对话框 结果同Ex HelloWin 理解程序代码 1 程序运行机制MFC是使用afxwin h来代替头文件windows h 在Ex HelloMFC程序中看不到Windows应用程序所必须的程序入口函数WinMain 因为MFC将它隐藏在应用程序框架内部了 当用户运行应用程序时 Windows会自动调用应用程序框架内部的WinMain函数 并自动查找该应用程序类CHelloApp的全局变量theApp 然后自动调用CHelloApp的虚函数InitInstance 该函数会进一步调用相应的函数来完成主窗口的构造和显示工作 首先执行的是 m pMainWnd newCMainFrame 该语句用来创建从CFrameWnd类派生而来的用户框架窗口CMainFrame类对象 继而调用该类的构造函数 使得Create函数被调用 完成窗口的创建工作 然后执行后面两句 用作窗口的显示和更新 m pMainWnd ShowWindow m nCmdShow m pMainWnd UpdateWindow 最后返回TRUE 表示

温馨提示

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

最新文档

评论

0/150

提交评论