




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Windows与MFC编程基础,Windows与MFC编程基础,东南大学软件学院(苏州 ) C+程序设计,C+开发面向对象开发Windows应用程序的两种主要方法:,使用Windows API(Application Programming Interface,应用程序编程接口)函数 利用MFC(Microsoft Foundation Class,微软基础类库)类库,Windows API是Windows系统和应用程序间的标准接口,为应用程序提供Windows支持的函数定义、参数定义和消息格式等,MFC类库包括用来开发C+应用程序和Windows应用程序的一组类,这些类用来表示窗口、对话框、设备上下文、公共GDI对象如画笔、调色板、控制框和其它标准的Windows部件,封装了大部分的Windows API函数,应用程序、操作系统、计算机硬件之间的互关系,操作系统能够操纵输出设备,以执行特定的功能,如让声卡发出声音,让显卡画出图形。,操作系统能够感知输入设备状态的变化,如鼠标移动,键盘按下,并且能够知道鼠标移动的具体位置,键盘按下的哪个字符,表示应用程序可以通知操作系统执行某个具体的动作,操作系统能够将输入设备的变化上传给应用程序,东南大学软件学院(苏州 ) C+程序设计,Windows消息传递,东南大学软件学院(苏州 ) C+程序设计,消息是一种报告有关事件发生的通知,类似于DOS下的用户输入,Windows应用程序是由消息驱动的,编写消息处理函数是Windows编程的主要工作之一,Windows事件驱动,东南大学软件学院(苏州 ) C+程序设计,Windows系统使用事件驱动的编程模式。事件用来标识发生的某件事情,主要采用以下三种方式产生:,(1) 通过输入设备,如键盘和鼠标。 (2) 通过屏幕上的可视对象,如菜单、工具栏按钮、滚动条和对话框上的控件。 (3) 来自Windows内部。,Windows消息传递,东南大学软件学院(苏州 ) C+程序设计,Windows消息是在Windows文件中用宏定义的常数。消息常数名通常以WM开头,格式为WM_XXX。在winuser.h中,消息结构的定义如下: typedef struct tagMSG HWND hWnd; / 指定消息发送的窗口句柄 UINT message; / 标识消息的消息值 WPARAM wParam; / 消息参数 LPARAM lParam; / 消息参数 DWORD time; / 消息进入队列的时间 POINT pt; / 消息进入队列时鼠标指针的屏幕坐标 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+程序设计,窗口类CWnd CWnd类提供了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福建事业单位工勤人员考试机械技术工训练题及答案
- 碳青霉烯类耐药肠杆菌预防与控制相关知识测试题及答案
- 常用仪器抢救设备及急救药品培训考试试卷测试题及答案
- 双方自愿离婚房产分割及权益保障补充协议
- 药事管理与法规考试试题及答案
- 旧房改造项目施工合同签订风险分析与应对措施
- 社区安保服务合同终止及物业接管协议
- 离婚房产赠与未成年子女监护权与成长基金合同
- 体育馆空调及体育场馆专用新风系统改造合同
- 互联网平台离职员工用户数据及商业秘密保密合同
- 人防机房管理制度
- 2025年乡村教育发展研究课题结题报告
- 2025年轴流冷却风扇行业深度研究分析报告
- 自动生成的文档-202504081202-98
- 华能集团薪酬管理制度
- T/CNFAGS 16-2024绿色甲醇分级标准(试行)
- 国家能源集团共享服务中心有限公司-企业报告(业主版)
- 《顺丰速运探索》课件
- 《动物繁殖技术》课件
- 中学生法制教育课件
- 智能语音病历录入行业跨境出海战略研究报告
评论
0/150
提交评论