1 / 18

MFC 初步

MFC 初步. Microsoft Foundation Class 微软基础类. Windows GUI 程序. Windows 图形用户界面 各种用户界面元素 窗口 菜单 工具条 状态条 列表框 滚动条. Windows GUI 程序. Win32 应用程序接口 (API) Windows 操作系统的一部分 利用 Microsoft 基础类 (MFC) 简化 GUI Win32 API 编程. MFC 是一个编程框架. MFC (Microsoft Foundation Class Library) 中的各种类结合起来构成了一个 应用程序框架

Download Presentation

MFC 初步

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MFC初步 Microsoft Foundation Class 微软基础类

  2. Windows GUI程序 • Windows图形用户界面 • 各种用户界面元素 • 窗口 • 菜单 • 工具条 • 状态条 • 列表框 • 滚动条

  3. Windows GUI程序 • Win32应用程序接口(API) • Windows操作系统的一部分 • 利用Microsoft基础类(MFC) • 简化GUI Win32 API编程

  4. MFC是一个编程框架 • MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架 • 目的就是让程序员在此基础上来建立Windows下的应用程序(菜单,按钮,对话框…) • MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。

  5. Microsoft Visual C++ • Microsoft Visual C++提供了相应的工具来完成这个工作 • AppWizard可以用来生成初步的框架文件(代码和资源等) • 资源编辑器用于帮助直观地设计用户接口 • ClassWizard用来协助添加代码到框架文件 • 编译,通过类库实现了应用程序特定的逻辑

  6. 封装 • MFC类库是C++类库 • 这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能 • 对Win32应用程序编程接口的封装 • 用一个C++ Object来包装一个Windows Object。例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。 • 对应用程序概念的封装 • 使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。MFC把许多类似的处理封装起来,替程序员完成这些工作。另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。 • 对COM/OLE特性的封装 • 对ODBC功能的封装

  7. 继承 • MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。这些类中,最重要的类是CObject和CCmdTarget。 • CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。 • CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。 • CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。 • 针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd;应用程序对象,基类是CwinThread;文档对象,基类是Cdocument,等等。 • 程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的。

  8. MFC的宏观框架体系 • MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。 • 这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。 • 消息映射机制

  9. MFC Overview • MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。 • MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。 • MFC是C++类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C++对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。

  10. MDI应用程序的构成 • 主框架窗口 • 视窗口、工具条和状态栏 • 五个类 • CTApp:应用程序对象 • CTDoc:文档对象 • CTView:视对象 • CMainFrame:主框架窗口对象 • CChildFrame:文档边框窗口对象

  11. 预编译头文件 • 头文件预编译 • 把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。 • 预编译结果文件是projectname.pch。 • 编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。 • 编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。 • 因此,所有的CPP实现文件第一条语句都是: • #include "stdafx.h"。

  12. 理解Windows消息机制 • Windows系统是一个消息驱动的OS • 消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单转中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。 • 谁将收到消息:一个消息必须由一个窗口接收。在窗口的过程(WNDPROC)中可以对消息进行分析,对自己感兴趣的消息进行处理。例如你希望对菜单选择进行处理那么你可以定义对WM_COMMAND进行处理的代码,如果希望在窗口中进行图形输出就必须对WM_PAINT进行处理。 • 未处理的消息到那里去了:M$为窗口编写了默认的窗口过程,这个窗口过程将负责处理那些你不处理消息。正因为有了这个默认窗口过程我们才可以利用Windows的窗口进行开发而不必过多关注窗口各种消息的处理。例如窗口在被拖动时会有很多消息发送,而我们都可以不予理睬让系统自己去处理。 • 窗口句柄 • 消息机制 • 系统将会维护一个或多个消息队列,所有产生的消息都回被放入或是插入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系统所以Windows可以同时进行多个任务。

  13. Windows event handling

  14. VC的代码生成器 • VC提供两个主要的代码生成器: AppWizard 应用程序向导、ClassWizard类向导。 • AppWizard生成应用程序框架:选择工程类型、工程创建的相关选项… • ClassWizard用来创建事件回调函数,生成函数的框架。AppWizard只要程序开始时用一次,而ClassWizard随着功能的增加会多次应用。

  15. 一个简单的SDI程序 • 用AppWizard生成的一个简单的SDI程序有下面的四个类(从MFC派生): • CXXXApp: 从CwndApp派生,该类处理程序的初始化。一般用户不用修改它。 • CXXXDoc: 从CDocument派生,存储数据 • CXXXView: 从CView派生,代表程序的视图和控制器。其中的OnDraw负责显示数据,也可根据需要增加回调函数。 • CMainFrame:从CFrameWnd派生。代表程序的框架窗口,用来管理程序的视图。

  16. Q&A

More Related