1 / 30

MFC 基础

MFC 基础. 本章目标. 了解 MFC 的类体系 了解 MFC 应用程序类型 熟悉 MFC 应用程序开发方法 熟悉 MFC 的全局函数 熟悉 MFC 的框架结构 熟悉 MFC 的消息映射和消息分类 掌握 MFC 应用程序向导的使用 熟悉 MFC 子控件的使用 掌握 MFC 的 CString 类、文件类的使用 熟悉动态数组类、链表类的使用 掌握 MFC 的常用绘图操作 熟悉 MFC 中与绘图有关的数据类型的使用. MFC 概述 — 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基础

  2. 本章目标 • 了解MFC的类体系 • 了解MFC应用程序类型 • 熟悉MFC应用程序开发方法 • 熟悉MFC的全局函数 • 熟悉MFC的框架结构 • 熟悉MFC的消息映射和消息分类 • 掌握MFC应用程序向导的使用 • 熟悉MFC子控件的使用 • 掌握MFC的CString类、文件类的使用 • 熟悉动态数组类、链表类的使用 • 掌握MFC的常用绘图操作 • 熟悉MFC中与绘图有关的数据类型的使用

  3. MFC概述—MFC简介 • MFC(Microsoft Foundation Class Library)是微软基础类库的简称 • MFC类库以层次结构组织起来,其中封装了大部分Windows API函数和Windows控件 • MFC目的就是让程序员在MFC基础上来建立Windows下的应用程序

  4. MFC概述—一个简单的MFC程序 #include <afxwin.h> //包含MFC头文件 //从MFC的主框架窗体派生用户窗体类 class CMyWnd:publicCFrameWnd { public: CMyWnd(LPCTSTR szTitle) { //调用父类的Create函数创建窗体 Create(NULL,szTitle); } }; //从MFC的应用程序派生用户程序类 classCMyApp:publicCWinApp { public: virtualBOOL InitInstance(); }; //覆盖(改写)继承的应用程序初始化虚函数 BOOL CMyApp::InitInstance() { //创建窗体并保存到m_pMainWnd中 m_pMainWnd = new CMyWnd(_T("一个简单的MFC程序")); m_pMainWnd->ShowWindow(m_nCmdShow); return TRUE; } //定义用户程序全局对象 CMyApp myApp;

  5. MFC概述—MFC应用程序分析 • 无WinMain()函数 • 应用程序对象:必须利用应用程序类实例化一个全局对象 • InitInstance()函数:派生类中重写,用于初始化应用程序 • MFC窗体:利用MFC已有的窗体类派生或实例化

  6. MFC概述—MFC应用程序开发方法

  7. MFC应用程序框架—全局函数

  8. MFC应用程序框架—类体系

  9. MFC应用程序框架—消息映射 • 进行MFC消息处理,需要为每一个要处理的消息提供一个消息处理函数 • MFC框架会自动按照一套消息映射机制来调用相应的消息处理函数。 • MFC消息映射采用C语言宏的方式,把消息和消息处理函数一一对应起来。 • 在MFC的框架结构下,可以进行消息处理的类的头文件(或类定义文件)里面都会含有DECLARE_MESSAGE_MAP()宏

  10. MFC应用程序框架—消息映射 • 源程序中的消息映射区: BEGIN_MESSAGE_MAP(CInheritClass,CBaseClass) ON_MESSAGE(message1,meberFxn1) ON_MESSAGE(message2,meberFxn2) ...... END_MESSAGE_MAP

  11. MFC应用程序框架—消息映射 • 1. 普通窗口消息

  12. MFC应用程序框架—消息映射 • 2. 命令消息 //命令消息使用ON_COMMAND宏对其进行映射响应,格式如下: ON_COMMAND(命令ID,响应函数) //响应函数的原型如下: afx_msgvoid memberFxn(); //举例如下: ON_COMMAND(IDM_FILENEW,OnFileNew) //“新建”菜单命令 ON_COMMAND(IDM_FILEOPEN,OnFileOpen) //“打开”菜单命令

  13. MFC应用程序框架—消息映射 • 3. 控件通知消息 //控件消息映射宏的名称一般由三部分组成: ON_控件前缀_消息名(控件ID,响应函数) //举例如下: ON_BN_CLICKED (控件ID,响应函数) ON_CBN_DBCLK (组合框,响应函数) ON_EN_SETFOCUS (组合框,响应函数) ON_LBN_DBCLK (列表框ID,响应函数)

  14. MFC应用程序框架—应用程序类型

  15. MFC主要类—根类 • 根类CObject是MFC的抽象基类,其他MFC类一般都是从CObject直接或间接派生的。 • CObject类的构造函数不是公有的,因此不能直接使用该类实例化对象。 • CObject类为程序员提供了许多编程所需的公共操作,包括:对象的建立和删除、串行化支持、对象诊断输出以及运行时信息等。

  16. MFC主要类—应用程序体系结构类

  17. MFC主要类—可视对象类 • 1. 窗口类:CWndMFC的消息映射机制隐藏了CWnd类的窗口函数WndProc()。可以用该类创建普通的窗口 • 2. 对话框类:CDialogCDialog是对Windows对话框的封装。可以直接使用CDialog类实例化对象然后调用相关成员成员函数以创建对话框 • 3. 菜单类:CMenuCMenu类是CObject类的子类,它提供了一个面向对象的菜单界面 • 4. 子控件类子控件类是从CWnd派生的,是MFC对Windows控件的封装,用这些类可以在窗体上建立子控件

  18. MFC通用类—CString类 • 1. CString对象的创建 CString str1; //只创建对象,不赋值 CString str2(_T("创建CString对象")); //构造对象时,直接赋值 CString str3(_T('w')); //单字符赋值,字符串包含一个w字符 CString str4(_T('A'),10); //产生10个”A”的字符串 CString str5=str2; //直接字符串赋值,str5的内容从str2复制过来的 CString str6((LPCSTR)ID_FILE_NEW); //用字符串资源ID_FILE_NEW的值构造str6

  19. MFC通用类—CString类 • 2. CString常用操作 • 连接字符串:使用“+”操作符将一个CString字符串与另一个CString字符串或C风格的字符串连接起来; • 比较字符串:使用Comapare()成员函数比较两个CString字符串的大小,从第一个字母开始,按照ASCII值比较,如果第一个字母相同,再比较下一个字母,依次往下,直到比较出大小为止; • 查找字符串:使用Find()成员函数可以从字符串的指定位置开始查找指定字符或字符串,并返回字符所在字符串中的索引位置; • 提取字符串:使用Left()、Mid()和Right()成员函数,可以从一个字符串的左边、中间、右边位置开始提取字符串; • 变换字符串:使用MakeUpper()、MakeLower()函数可以变换字符串的大小写。

  20. MFC通用类—CString类 • 3. CString格式化 • 格式控制字符串的一般形式为:<%>[标志][输出最小宽度][精度][长度]<格式符> //使用CString的Format()函数进行格式化的示例代码如下: double f=12356.734; CString str; str.Format("使用指数形式输出:%.3e",f); AfxMessageBox(str); //输出内容是:使用指数形式输出:1.236e+00

  21. MFC通用类—CFile类 • CFile类封装了Windows的文件操作,可以打开/创建文件、读/写文件等。使用CFile类进行文件操作的一般步骤是 : • 构造CFile对象; • 打开文件; • 读/写文件; • 关闭文件

  22. MFC通用类—动态数组类 • MFC的数组类包含CByteArray、CDwordArray、CPtrArray、CUIntArray、CWordArray、CStringArray和CObArray。 • 每一个类都被设计为能够处理一个特定的数据类型。

  23. MFC通用类—动态数组类主要成员函数

  24. MFC通用类—链表类 • MFC的链表类包括CPtrList、CStringList、CObList,是分别存储void*、CString、CObject*数据的链表集合。

  25. MFC通用类—链表类主要成员函数

  26. MFC绘图—MFC对GDI的支持 • GDI是Windows图形设备接口 。MFC对GDI操作进行了进一步的封装,简化了使用方法。 • MFC类CPaintDC封装了GDI绘图机制。 • 在基于文档/视图结构的应用程序框架中,一般在视图类(CView)的OnDraw()成员函数中处理有关重绘的操作。 void TestDemoView::OnDraw(CDC* pDC) { CTestDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; //进行绘图操作 }

  27. MFC绘图—MFC绘图对象 • MFC绘图对象类的主要成员函数及功能:

  28. MFC绘图—MFC绘图对象 • 在使用MFC绘图对象时要遵守一定的规则 : • 创建对象:调用构造函数实例化对象,若构造函数没有创建相应的GDI对象,则要调用成员函数进一步创建; • 调用CDC类的SelectObject选入DC; • 调用CDC类的成员函数绘图; • 恢复原来的对象; • 对象离开作用域,自动释放绘图对象,这一步由系统自动实现。

  29. MFC绘图—图形绘制相关数据类型 • CPoint类:封装了一个点的坐标 • CSize类:封装距离以及相对位置 • CRect类:用来表示一个矩形

  30. 小结 • MFC提供了一个应用程序框架,简化和标准化了Windows程序设计 • MFC应用程序是建立在Windows应用程序机制基础上的 • MFC提供了大量的类供程序员继承或直接实例化 • MFC比较繁杂,要使用好MFC需要随时查阅MSDN • 利用MFC消息映射机制处理消息,程序员要做的就是为每个要处理的消息提供一个消息处理函数 • MFC中以Afx开头的函数都是全局函数 • MFC将Windows程序分为三类:单文档程序(SDI)、多文档程序(MDI)、基于对话框的程序 • MFC通用类提供了许多通用服务,例如字符串处理、文件读写、动态数组、链表 • MFC对GDI操作进行了进一步的封装,主要体现在三方面:CDC及其派生类、图形对象类以及与绘图有关的数据类型

More Related