




免费预览已结束,剩余25页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Windows与MFC编程基础 Windows与MFC编程基础 东南大学软件学院 苏州 C 程序设计 C 开发面向对象开发Windows应用程序的两种主要方法 使用WindowsAPI ApplicationProgrammingInterface 应用程序编程接口 函数利用MFC MicrosoftFoundationClass 微软基础类库 类库 WindowsAPI是Windows系统和应用程序间的标准接口 为应用程序提供Windows支持的函数定义 参数定义和消息格式等 MFC类库包括用来开发C 应用程序和Windows应用程序的一组类 这些类用来表示窗口 对话框 设备上下文 公共GDI对象如画笔 调色板 控制框和其它标准的Windows部件 封装了大部分的WindowsAPI函数 应用程序 操作系统 计算机硬件之间的互关系 操作系统能够操纵输出设备 以执行特定的功能 如让声卡发出声音 让显卡画出图形 操作系统能够感知输入设备状态的变化 如鼠标移动 键盘按下 并且能够知道鼠标移动的具体位置 键盘按下的哪个字符 表示应用程序可以通知操作系统执行某个具体的动作 操作系统能够将输入设备的变化上传给应用程序 东南大学软件学院 苏州 C 程序设计 Windows消息传递 东南大学软件学院 苏州 C 程序设计 消息是一种报告有关事件发生的通知 类似于DOS下的用户输入 Windows应用程序是由消息驱动的 编写消息处理函数是Windows编程的主要工作之一 Windows事件驱动 东南大学软件学院 苏州 C 程序设计 Windows系统使用事件驱动的编程模式 事件用来标识发生的某件事情 主要采用以下三种方式产生 1 通过输入设备 如键盘和鼠标 2 通过屏幕上的可视对象 如菜单 工具栏按钮 滚动条和对话框上的控件 3 来自Windows内部 Windows消息传递 东南大学软件学院 苏州 C 程序设计 Windows消息是在Windows文件中用宏定义的常数 消息常数名通常以WM开头 格式为WM XXX 在winuser h中 消息结构的定义如下 typedefstructtagMSG HWNDhWnd 指定消息发送的窗口句柄UINTmessage 标识消息的消息值WPARAMwParam 消息参数LPARAMlParam 消息参数DWORDtime 消息进入队列的时间POINTpt 消息进入队列时鼠标指针的屏幕坐标 MSG PMSG NEAR NPMSG FAR LPMSG Windows句柄 东南大学软件学院 苏州 C 程序设计 句柄是Windows编程的一个关键性的概念 编写Windows应用程序总是要和各种句柄打交道 所谓句柄 就是一个唯一的整数值 是一个4字节长的数值 用以标识许多不同的对象类型 如窗口 菜单 内存 画笔 画刷和文件等 由于Windows是一个多任务操作系统 它可以同时运行多个程序或一个程序的多个副本 Windows不仅使用句柄来管理实例 也用它来管理窗口 位图 字体 元文件和图标等系统资源 Windows程序的结构 东南大学软件学院 苏州 C 程序设计 告诉操作系统该程序需要的窗口的种类创建程序窗口初始化程序窗口获得属于该程序的Windows消息 Windows消息处理的基本流程 东南大学软件学院 苏州 C 程序设计 MFC简介 东南大学软件学院 苏州 C 程序设计 MFC还很好地保持了程序的向下兼容性 是用来编写Windows应用程序的C 类集 以层次结构组织 封装了大部分API函数 提供了图形环境下应用程序的框架 提供了创建应用程序的组件 提供了大量的基类供程序员根据不同的应用环境进行扩充 允许在编程过程中自定义和扩展应用程序中的类 较好的移植性 可移植于众多的平台 MFC简介 MFC体系结构 东南大学软件学院 苏州 C 程序设计 宏 MFC体系结构 类是MFC中最主要的内容 MFC类是以层次结构方式组织起来的 MFC中的类分成两部分 一部分是辅助类 一类是直接或间接从Cobject继承而来的来的类 MFC宏主要功能 消息映射 运行时对象类型服务 诊断服务 异常处理 全局函数以 Afx 为前缀 全局变量以 afx 为前缀 可以被应用程序中的所有类和函数所调用 如AfxAbort 无条件终止一个应用程序的执行 MFC基本层次结构图 东南大学软件学院 苏州 C 程序设计 MFC应用程序的类型 东南大学软件学院 苏州 C 程序设计 单文档界面应用程序简称SDI 只允许一个框架窗口存在 每次只能创建和拥有一个文档对象 也只允许打开一个文档 程序执行时允许打开多个MDI子框架窗口 拥有各自的文档和视图对象 在打开的多个子窗口中 只有一个活动窗口 应用程序菜单和工具栏的所有的命令都是针对活动窗口的 基于对话框的应用 它包含一个CWinApp对象和一个模拟的对话框 对话框负责数据的存储和显示 MFC应用程序创建 东南大学软件学院 苏州 C 程序设计 创建过程的5个核心类 CWinApp Cdocument CView CFrameWnd CDocTemplate 东南大学软件学院 苏州 C 程序设计 MFC应用程序创建 1 构造全局对象 CWinApp派生类对象 2 调用CHelloApp的虚函数InitInstance 东南大学软件学院 苏州 C 程序设计 MFC应用程序创建 3 回到WinMain中 调用pApp Run 进入消息循环 通过API函数GetMessage获得消息 TranslateMessage处理消息 ispatchMessage派送消息到CWnd DefWindowProc DefWindowProc按照消息映射表的定义将消息分发到各相应消息处理函数 如消息队列为空 则Run调用CWinApp OnIdle进行空闲处理 重载OnIdle可以去处理后台程序 低优先级 4 若用户选择菜单File Close 则程序收到WM COLSE消息 调用 DestroyWindow发出WM DESTROY消息 然后调PostQuitMessage 发出WM QUIT消息 此时Run会结束其内部消息循环 调用ExitInstance 东南大学软件学院 苏州 C 程序设计 MFC文档 视图结构 文档 提供了一种连续的处理数据方式 其目的是使应用程序的数据本身与数据的显示分开处理 文档类是从MFC的Cdocument派生而来 需要添加数据成员来存储应用程序需要的数据 还需要添加函数成员来支持对数据的处理 视图类 对象代表了应用程序的窗口客户区 是文档信息的一个显示窗口 视口 它同时也是用户与程序之间信息交互的桥梁 用户对数据的编辑和修改需要通过键盘或鼠标进行 这些消息都由视图类接受后再反映到文档类 东南大学软件学院 苏州 C 程序设计 MFC文档视图结构 视图类的派生关系 东南大学软件学院 苏州 C 程序设计 MFC文档视图结构 文档与视图的连接 CSingleDocTemplate类与CMultiDocTemplate两个文档模板类 MFC消息映射 东南大学软件学院 苏州 C 程序设计 MFC内部通过一系列非常复杂的宏处理消息映射 但定义和使用消息映射表却相对简单 可通过三个步骤完成 在头文件的类声明中添加DECLARE MESSAGE MAP宏声明消息映射 在类的定义文件 cpp 定义消息映射表 方法是在文件的开始处添加BEIGN MESSAGE MAP和END MESSAGE MAP这一对宏 在它们之间放置消息映射宏 定义并初始化消息映射表 将消息与处理消息的函数之间建立联系 在类的定义文件 cpp 中添加消息处理函数 东南大学软件学院 苏州 C 程序设计 MFC消息映射 MFC把消息分为三大类 1 标准Windows消息 WM xxx 2 命令消息 WM COMMAND 3 控件通知消息 对标准windows消息的相应 东南大学软件学院 苏州 C 程序设计 MFC消息映射 2 对命令消息的的响应 ON COMMAND宏定义对命令消息的响应 格式为ON COMMAND 举例如下 ON COMMAND IDM ABOUT OnAbout 表示IDM ABOUT消息由OnAbout 响应 以下类似ON COMMAND IDM FILENEW OnFileNew ON COMMAND IDM FILEOPEN OnFileOpen 所有由用户定义的命令消息也由ON COMMAND定义消息映射关系 东南大学软件学院 苏州 C 程序设计 3 对控件消息的响应 控件消息由按钮 BN 编辑框 EN 组合框 CBN 列表框 LBN 等产生 在消息名前加上ON 即构成宏名 举例如下 ON BN CLICKED ON CBN DBCLK ON EN SETFOCUS ON LBN DBCLK 分别表示选择各个控件后 产生的消息由其后面定义的函数进行处理 如果利用类向导ClassWizard添加消息处理函数 系统会自动生成函数原型和函数框架 开发人员只要添加函数体代码 可以避免一些常见错误的产生 MFC核心类 东南大学软件学院 苏州 C 程序设计 窗口应用程序类CWinApp每一个使用MFC的应用程序只能包含一个从CWndApp派生的应用程序对象 当其它全局对象被构造时 这个对象也同时被构造 当Windows调用WinMain 函数时 产生的对象已经有效了 从CWinApp实例化的应用程序对象是一个全局变量 在程序运行中该对象可以与其它对象相互协调 1 访问CWinApp对象以及全局函数 AfxGetApp 获得一指向CWinApp对象的指针AfxGetResourceHabdle 获得一应用程序资源的句柄 AfxGetAppName 获得一指针 它指向一个包含应用程序名的字符串 2 CWinApp的保护成员函数SetDialogBkColor 为对话框和消息框设置缺省的背景颜色 Enable3dConrtols 允许具有三维外观的控件 MFC核心类 东南大学软件学院 苏州 C 程序设计 3 CWinApp的可重载 overload 的函数InitApplication 重载以执行任何应用程序层次上的初始化 InitInstance 重载以执行Windows对象实例的初始化 诸如建立用户窗口对象等 Run 运行缺省的消息循环 重载该函数以自定义消息循环 OnIdle 重载以执行任何应用程序指定的空闲时间处理 PreTranslateMessage 在窗口消息被TranslateMessage 和DispatchMessage 处理之前过滤它们 MFC核心类 东南大学软件学院 苏州 C 程序设计 窗口类CWndCWnd类提供了MFC中所有窗口类的基类 CWnd与Windows窗口有所不同 但他们又是紧密相连的 CWnd对象是由CWnd的构造函数和析构函数建立和取消的 而Windows窗口与此不同 它是Windows的一个结构 是由create成员函数建立的 DestroyWindow函数破坏Windows窗口而不是破坏对象 1 CWnd类的公共数据成员m hWnd 标识连接到该CWnd对象上的HWND 2 CWnd类的初始化函数Create 创建并初始化与该CWnd对象相联系的子窗口 PreCreateWindow 在建立连接到这个CWnd对象的Windows窗口之前调用此函数 MFC核心类 东南大学软件学院 苏州 C 程序设计 文档 视图类文档对象由文档模板对象创建 管理应用程序的数据 视图对象表示一个窗口的客户区 它显示文档数据并允许用户与之交互 CDocTemplate类 文档模板的基类 它负责协调文档 视窗和框架窗口的创建 CMultiDocTemplate类 多文档界面 MDI 的文档模板 CSingleDocTemplate类 单文档界面 SDI 的文档模板 CDocument 应用程序所用文档的基类 CView 显示文档数据的应用程序专用视图的基类 东南大学软件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨国公司技术研发人员聘用及项目合作合同
- 跨境投资连带责任保证贷款协议范本
- 垃圾分类处理设施工程款结算及环保达标协议
- 环保监测系统软件版本更新及数据分析能力拓展合同
- 项目合同知识产权归属及衍生作品开发协议
- 2025年建筑工程类环境影响评价工程师案例分析-案例分析参考题库含答案解析(5卷)
- 2025年建筑工程类交安三类人员企业主要负责人(A证)-专职安全生产管理人员(C证)参考题库含答案解析(5卷)
- 2025年学历类自考专业(电子商务)网络营销与策划-市场营销(三)参考题库含答案解析(5卷)
- 保育老师培训安全卫生课件
- 2025年学历类自考专业(法律)行政法学-税法参考题库含答案解析(5卷)
- 重庆中医药学院2025年第二季度考核招聘工作人员笔试备考题库及答案详解一套
- 资阳市安岳县县属国有企业招聘(33人)考前自测高频考点模拟试题附答案详解
- 房建满堂脚手架专项验算书
- 全科医学的基本原则和特点课件
- 国家综合性消防救援队伍消防员管理规定
- 《非线性动力学》课程教学大纲
- 生态农庄设计规划课件
- 《工程制图完整》课件
- 互换性与测量技术基础总复习题与答案
- 北京工业地产工业园区调研报告
- 英国文学各个时期介绍超全
评论
0/150
提交评论