1 / 108

MFC 程序设计

MFC 程序设计. 提纲. 1. MFC 类. 应用程序框架. 2. 3. MFC 程序的执行流程. 4. MFC 编程. 5. 绘图对象. MFC 程序设计. MFC ( Microsoft Foundation Class ,微软基础类库)是微软公司提供的一个类库,大多数 Windows API 函数被封装在该库的不同类中,提供了对 API 函数更便捷的操作方法。

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. 提纲 1 MFC类 应用程序框架 2 3 MFC程序的执行流程 4 MFC编程 5 绘图对象

  3. MFC程序设计 • MFC(Microsoft Foundation Class,微软基础类库)是微软公司提供的一个类库,大多数Windows API函数被封装在该库的不同类中,提供了对API函数更便捷的操作方法。 • MFC还提供了一种称为应用程序框架的程序设计方法,利用该方法可以快捷地构建出标准Windows程序的基本框架,然后扩展该框架的功能,就能够快速地设计出功能强大的Windows程序,提高软件开发的效率。

  4. 9.1. MFC类 • MFC类的本质 • Microsoft利用面向对象的程序技术将大多数Windows API函数封装在类中,并通过继承形成了一种具有层次结构的类结构,称为MFC(Microsoft Foundation Class,微软基础类库)。 • MFC中的类非常全面,覆盖了绝大多数标准Windows程序部件,如窗口、对话框、菜单、工具条、设备环境、画笔、调色板、控件等。 • 在MFC类库中定义的成员函数有好几百个,其中许多是对Windows API函数的简单封装,甚至与对应的API函数有着相同的函数名字。

  5. 9.1.1 MFC类 • MFC类的结构

  6. 9.1 MFC类 • MFC中主要的类 • 根类CObject类: • CObject类是MFC的抽象基类,是 MFC中大多数类及用户自定子类的根类,为程序员提供了许多公共操作,这些操作包括对象的建立和删除,对象诊断,输出运行时信息等; • 应用程序框架类(命令相关类CCmdTarget类) • 这些类用于构造出应用程序的结构,提供多数应用程序共用的功能,程序员可以通过这些类生成Windwos程序的雏形。编写程序的任务,就是填充框架,添加应用程序专用的功能,简化了应用程序的开发; • 应用程序框架类包括应用程序类(CWinApp)、线程类(CWindThread)、文档模板类(CDocTemplate、CSingleDocTemplate、CMultiDocTemplate)、窗口类(CWnd)、文档类(CDocument)等

  7. 9.1 MFC类 • 文档/视图类: • 文档对象是由文档模板对象所创建的用于管理应用程序的数据; • 视图对象表示一个窗口的用户区显示文档数据并允许用户与其交互; • 文档/视图类包括以下子类或模板: • 1)CDocTemplate文档模板的基类文档模板, 用于协调文档视图和框架窗口的创建; • 2)CSingleDocTemplate单文档界面SDI的文档模板 • 3)CMultiDocTemplate多文档界面MDI的文档模板; • 4)CDocument应用程序专用文档的基类; • 5)CView用于显示文档数据的应用程序专有视图的基类;

  8. 9.1 MFC类 • 通用数据处理类 • 包括字符串类(CString)、集合类(CByteArray、CDwordArray、CPtrArray、CStringArray等)、映射类(CMapPtrToTpr、CMapStringToOb等)、链表类(CObList、CPtrList、CStringList等) • Windows API封装类 • 将API函数按其功能分别封装到不同的类中,并为许多封装在类中的API函数提供了缺省参数,使程序员可以通过类成员的方式访问API函数,简化了API函数的访问。 • 如CWnd、CFrameWnd、CMIDIFrameWnd、CMainFrameWndCDialog、CFileDialogCDC、CPaintDC、CClientDC、CWindowDC等

  9. 9.1 MFC类 • 6)可视对象类: • 窗口类CWnd: • CWnd类提供了MFC中所有窗口类的基本功能,是CCmdTarget类的子类; • 创建一个Windows窗口要分两步进行: • 1)构造一个CWnd对象; • 2)调用Create建立Windows窗口并将它连到CWnd对象上;

  10. 9.1 MFC类 • MFC中还包括从CWnd类派生出来的进一步的窗口类型以完成更具体的窗口创建工作,这些派生类有: • 1)CFrameWnd框架窗口类,是SDI应用程序主框架窗口的基类; • 2)CMDIFrameWnd多文档框架窗口类,是MDI应用程序主框架窗口的基类; • 3)CMDIChildWnd多文档子窗口类,是MDI应用程序文档框架窗口的基类;

  11. 9.1 MFC类 • 视图类CView: • CView类用于表示框架窗口的客户区以及显示文档数据; • CView类包括以下子类: • 1)CScrollView具有滚动功能的视图的基类; • 2)CEditView具有文本编辑查找替换和滚动功能的视图的基类;

  12. 9.1 MFC类 • 菜单类CMenu类: • CMenu类是CObject类的子类用于管理菜单,提供了与窗口有关的菜单资源,建立修改跟踪及删除功能的成员函数;

  13. 9.1 MFC类 • 对话框类CDialog: • CDialog类是从CWnd类中派生出来的对话框类; • 它包括如下一些子类: • CFileDialog提供用于打开或保存文件的标准对话框; • CColorDialog提供用于选择颜色的标准对话框; • CFontDialog提供用于选择字体的标准对话框; • CPrintDialog提供用于打印文件的标准对话框; • CFindReplaceDialog提供用于删除查找并替换的标准对话框;

  14. 9.1 MFC类 • 控制类: • 控制类子层次结构为Windows应用程序提供了各种输入和显示界面的控件类,这时控件指放在窗口中可视对象; • Cstatic:常用于标注分隔窗口中其他控件; • Cbutton:为对话框或窗口中的按钮复选框或单选按钮提供一个总的接口; • Cedit:用于接收用户的文字输入; • CRichEditCtrl:除了提供文本编辑控件的功能外还支持字符和图形格式等功能; • CSrollBar:提供控制条的功能用做对话框或窗口中的一个控件用户可通过它在某一范围内进行定位;

  15. 9.1 MFC类 • CProgressCtrl:用于指示操作的进度; • CSliderCtrl:包括一个可移动的滑标用户可移动滑标来选择一个值或一个范围; • CListBox:用于显示一组列表项用户可以进行观察和选择; • CComboBox:组合框控件类由一个编辑控制加一个列表框组成; • CBitmapButton:位图按钮控件类是带有位图而非文字标题的按钮; • CSpinButtonCtrl:带有一个双向箭头按钮的控件类用户单击某个箭头按钮将增大值或减小值; • CAnimateCtrl:动画显示控件类用于显示一个简单的视频图像

  16. 9.1 MFC类 • 控制条类CControlBar: • 控制条类是如下两个子类的基类: • CToolBar工具条控件类, • CStatusBar状态条控件类 ;

  17. 9.1 MFC类 • 设备描述表类CDC类: • CDC类及其子类支持设备描述表对象,是CObject类的子类,通过CDC对象的成员函数可以完成所有的绘画工作; • CDC包括的子类有: • CPaintDC:用于窗口的OnPaint成员函数和视图的OnDraw成员函数中自动调用BeginPaint进行构造,调用EndPaint进行析构; • CClientDC:用于窗口客户区的显示描述表; • CWindowDC:用于在整个窗口的显示描述表包括用户区和框架区;

  18. 9.1 MFC类 • 绘画对象类CGdiObject类: • 图形绘画对象子层次结构以CGdiObject类为根类,用于建立绘画对象模型,如画笔刷子字体位图调色板等,包括有如下一些子类: • CBitmap封装有GDI位图提供了一个操作位图的接口; • CBrush封装有GDI画刷可选择设备描述表的当前画刷; • CFont封装有GDI字体可选择设备描述表的当前字体; • CPalette封装有GDI调色板是应用程序和彩色输出设备如显示器之间的接口; • CPen封装有GDI画笔可选择设备描述表的当前画笔; • CRgn封装GDI区域用于操作窗口内的椭圆区域或多边形区域该类应与CDC类的裁剪成员函数起使用;

  19. 9.1 MFC类 • OLE类 • 提供了对OLE API的访问支持,允许用户创建和编辑复合文档,在这样的文档中可包含文本、图形、声音、流媒体等类型的数据 • 数据库类 • 提供对各种数据库的存取、建立、连接等操作,如数据源类(CDatabase)、记录集类(CRecordSet)、记录集视图类(CRecordView)、DAO接口类(CDaoDatabase)、DAO数据集类(CDaoRectordSet)、DAO数据表定义类(CDaoTebleDef)等。 • 网络类 • 允许用户通过ISAPI或Windows Sockets实现计算机网络互连,如CSocket类、ISAPI类、CHttpFilter类、CHttpServer类、CSocketFile类等。

  20. 9.2 应用程序框架 • Windows程序具有标准统一的程序结构,每个程序都包括窗口、消息循环和窗口函数等组成部分,MFC通过面向对象的程序技术将这些必备的程序结构封装在不同的类中,并且能够应用这些类生成具有最小功能的Windows程序,称为应用程序框架。 • 由MFC生成的应用程序框架具有标准的Windows程序窗口、菜单、工具条、状态栏及基本的消息处理能力,程序员可以在此基础上扩展程序功能,开发出具有强大程序功能的Windows应用程序。 • “应用程序框架” 定义了应用程序的轮廓,为用户提供了标准的实现接口。Windows应用程序的建立都是基于这个框架展开的。

  21. 9.2 应用程序框架 • MFC应用程序框架的类型 • MFC提供了三种类型的应用程序框架,它们均可由MFC向导生成。 • 基于框架窗口的应用程序 • 基于对话框的应用程序 • 基于文档/视图的应用程序

  22. 9.2 应用程序框架 • MFC应用程序框架程序的设计方法 • 利用Windows API函数进行编程时,大量的代码需要用户自己编写,及其户编程的工作量较大。 • Visual C++提供了建立MFC应用程序框架的向导。 • 利用MFC和向导(Wizard)来编写Windows应用程序,甚至不需要编写一行程序代码就能够生成一个具有最小功能的标准Windows应用程序框架,该框架程序具有标准的菜单、工具条、窗口及基本的消息处理能力。

  23. 9.2 应用程序框架 • MFC向导 • AppWizard用于生成应用程序框架 • AppWizard是开发Windows应用程序的最简单最方便的方法,它用于创建基于MFC类库的Windows应用程序框架文件如源文件头文件资源文件等; • Class Wizard用于添加自己的类和成员; 首先使用AppWizard来生成Windows应用程序的基本框架 然后用ClassWizard来建立应用程序的类、消息处理、数据处理函数或定义控件的属性、事件和方法 最后把各应用程序所要求的功能添加到类中

  24. 9.2 应用程序框架 • MFC向导可建立的主要应用程序框架类型

  25. 9.2 应用程序框架 • 用向导建立应用程序框架 • 例9-1 利用向导建立一个MFC AppWizard (exe)应用程序框架。 • 建立的过程如下: • (1)启动VC++ 6.0,选择“新建”命令,在弹出的对话框中选择“工程”标签项,在列表中选中“MFC AppWizard(exe)” 。在“位置”编辑框中输入d:\dk,在“工程”编辑框中输入My,如图所示。 • 设置完成后,单击“确定”按下,进入向导第1步

  26. 9.2 应用程序框架 • 选择一种文档类型,然后单击“下一个” • 本步向导用于设置程序是否需要进行数据库处理,单击“下一个”

  27. 9.2 应用程序框架 • 本步设置程序的复合文档支持,单击“下一个”进入下一步,如下图示 • 本步用于设置程序的工具条及其显示式样,单击下一步

  28. 9.2 应用程序框架 • 本步用于设置程序界面的外观,选择一种,进入下1步 • 上述向导过程将产生5个类(略了CAbout类)本步用于设置与修改各类的基类,单击完成。

  29. 9.2 应用程序框架 • 编译并执行MFC向导生成的应用程序框架,将见到下面的程序界面。 • 它已具备规范的Windows程序外形,和基本的消息处理能力。 • 程序员只需要在此基础上添加需要的事件处理函数,就能将它改造成需要的程序。这就是应用程序框架设计的程序思想。

  30. 9.2 应用程序框架 • MFC应用程序框架向导生成的类及文件 • 打开目录C:\dk\My,将看到向导生成了下面的文件: • MainFrm.h / MainFrm.cpp 框架窗口类MainFrame • My.h / My.cpp 对应应用程序类CMyApp • MyView.h / MyView.cpp 对应视图类CMyVeiw • MyDoc.h / MyDoc.cpp 对应文档类CMyDoc • StdAfx.h / StdAfx.cpp 每个MFC程序都必须有这两文件,它们定义了程序需要的全局数据结构和全局函数 • My.rc 保存菜单、工具栏等资源的文件 • Resource.h 资源头文件 • My.NCB / My.clw / My.dsp /My.dsw 与工程项目相关的文件 • 另外,向导还建立了Res和Debug两个目录。

  31. 9.2 应用程序框架 • 应用程序框架的结构 • VC++向导建立的应用程序框架为用户提供了标准的程序实现接口。为了能在向导建立的应用程序框架基础上扩展程序功能,应先了解框架程序的结构。 • MFC程序结构被VC++向导封装在应用程序框架的不同类中,每个类独立完成一部分功能。这些类分别是: • 应用程序类(CXXApp) • 文档类(CXXDoc) • 视图类(CXXView) • 框架窗口类(CMainFrame) • 表明程序版本信息的对话框类(CAboutDlg) • 其中的XX是启动向导时输入的工程项目名字。

  32. 9.2 应用程序框架 • 与基于框架窗口的程序框架有关的 MFC类结构 CObject CCmdTarget CWinthread CWinApp CMyApp CWnd CView CMyView CFrameWnd CMainFrame CDialog CAoutDlg CDocument CMyDoc

  33. 9. 2 应用程序框架 • CCmdTarget类 • CCmdTarget 是 MFC 消息映射结构的基类。消息映射将命令或消息发送给应用程序编写的处理命令或消息的响应函数。具有消息处理能力的类均应为该类的派生类。 • CWinThread 类 • Microsoft 的类库支持多个线程的并行执行。每个应用程序至少有一个线程(被称作主线程)。CWinThread 封装了操作系统的调度功能。 • CWinApp类 • CWinApp 封装了 Windows 应用程序初始化、运行、终止应用程序的代码。基于框架建立的应用程序必须有一个且只有一个从CWinApp派生的类对象。

  34. 9.2 应用程序框架 • CWnd类 • CWnd是各种窗口、对话框和控制框的通用基类,提供窗口处理中公共的窗口类注册、窗口创建与撤消等处理操作。 • CFrameWnd类 • 提供了一个 Windows 单文档界面,该界面具有重叠或弹出功能,并且可以通过成员函数实现对窗口的某些控制操作。

  35. 9.2 应用程序框架 • 对于多文档应用程序将有主框架窗口类CMainFrame和子窗口框架类CchildFrame主框架窗口类; • CmainFrame是从CMDIFrameWnd类中派生出来的 • CchildFrame是从CMDIChildWnd类中派生出来的主要用于管理在MDI主框架窗口中打开的各个文档;

  36. 9.2 应用程序框架 CWinApp 应用程序对象 m_pMainWnd CFrameWnd 应用程序框架窗口 • 基于框架窗口的应用程序结构的类关系 在建立应用程序对象时,MFC会自动执行应用程序类中的InitInstance(),该函数会建立框架窗口对象,并用指针m_pMainWnd指向该对象,这样就把应用程序与框架窗口关联起来了。

  37. 9.2 应用程序框架 • 应用程序框架的类分析 • 查看各类的代码之前,作两点说明 • ① 在向导建立的各个类中都有下面形式的注释代码段,介于这对注释之间的内容由MFC向导自动添加和删除,程序员不用干涉它。 • //{{AFX_MSG_MAP(CMainFrame) • …… • //}}AFX_MSG_MAP • ② 在每个类中都会见到“DECLARE_DYNCREATE(类名)”,这是一个宏,用于声明其括号中的类在程序运行时刻才被加载。

  38. 9.2 应用程序框架 • 1)应用程序类——CMyApp • 为应用程序的所有对象包括文档视图和边框窗口进行初始化,在应用程序中有且仅有一个应用程序对象被创建; • My.h • #include "resource.h" • class CMyApp : public CWinApp • {public: • CMyApp(); • //{{AFX_VIRTUAL(CMyApp) //{{……//}}之间的内容由向导添加 • public: • virtual BOOL InitInstance(); //必须重载该函数 • //}}AFX_VIRTUAL • afx_msg void OnAppAbout(); //菜单“帮助|关于”命令的消息函数 • DECLARE_MESSAGE_MAP() //声明本类要处理消息 • };

  39. 9.2 应用程序框架 • //My.cpp • //My类起到了连接作用,它将各类组织在一起,所以包含了各个类的头 • //文件 • #include "stdafx.h" //该头文件定义了一些全局数据、变量、函数 • #include "My.h" //本类的头文件 • #include "MainFrm.h" //框架窗口类MainFrame的头文件 • #include "MyDoc.h" //文档类MyDoc的头文件 • #include “MyView.h” //视图类MyView的头文件 • //下面是CMyApp类实现的菜单消息处理功能 • BEGIN_MESSAGE_MAP(CMyApp, CWinApp) • ON_COMMAND(ID_APP_ABOUT, OnAppAbout) //关于对话框 • ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)//新建文件 • ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)//打开文件 • END_MESSAGE_MAP()

  40. 9.2 应用程序框架 • CMyApp::CMyApp(){ } //构造函数,以缺省方式实现了许多功能 • BOOL CMyApp::InitInstance() • { • AfxEnableControlContainer(); //允许使用容器 • Enable3dControls(); //使用三维控件 • //写注册表 • SetRegistryKey(_T("Local AppWizard-Generated Applications")); • LoadStdProfileSettings(); //装载标准初始化文件.ini中的选项 • CSingleDocTemplate* pDocTemplate; //定义单文档对象指针 • pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME, //主菜单标识 • RUNTIME_CLASS(CMyDoc), //运行时加载文档类 • RUNTIME_CLASS(CMainFrame), //运行时加载主框架窗口类 • RUNTIME_CLASS(CMyView)); //运行时加载视图类 • AddDocTemplate(pDocTemplate); • CCommandLineInfo cmdInfo; //定义一个命令行对象 • ParseCommandLine(cmdInfo); //处理命令行消息 • if (!ProcessShellCommand(cmdInfo)) return FALSE; • m_pMainWnd->ShowWindow(SW_SHOW); //显示窗口 • m_pMainWnd->UpdateWindow(); //产生WM_PAINT消息, • return TRUE; • } • CMyApp theApp;

  41. 9.2 应用程序框架 • 2)框架窗口类——CMainFrame • 主要用于管理应用程序窗口,显示菜单栏,标题栏,工具栏,状态栏控制菜单和控制按钮等; • //MainFrm.h • class CMainFrame : public CFrameWnd//继承CFrameWnd的功能 • {protected: • CMainFrame(); //构造函数自动实现了许多功能 • DECLARE_DYNCREATE(CMainFrame)//与RUNTIME_CLASS相对应 • public: //预定义窗口,用于注册窗口 • virtual BOOL PreCreateWindow(CREATESTRUCT& cs); • virtual ~CMainFrame(); //析构函数 • virtual void AssertValid() const;//异常诊断和对象内部检测 • virtual void Dump(CDumpContext& dc) const;//用于对象诊断 • protected: • CStatusBar m_wndStatusBar; //定义状态条 • CToolBar m_wndToolBar; //定义工具条 • protected: • afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); //建立窗口 • DECLARE_MESSAGE_MAP() //声明本类要处理消息 • };

  42. 9.2 应用程序框架 • MainFrm.cpp • // MainFrm.cpp • #include "stdafx.h" • #include "My.h" • #include "MainFrm.h“ • IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) • BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) • //{{AFX_MSG_MAP(CMainFrame) • ON_WM_CREATE() • //}}AFX_MSG_MAP • END_MESSAGE_MAP() • //下面的函数为窗口注册作准备 • BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { • if(!CFrameWnd::PreCreateWindow(cs)) • return FALSE; • //若不按默认方式定义窗口,可以在此修改cs结构的域 • return TRUE; • }

  43. 9.2 应用程序框架 • int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) • { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) • return -1; //创建窗口 • //下面的命令建立工具栏 • if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD • | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY • |CBRS_SIZE_DYNAMIC) ||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) • { TRACE0("Failed to create toolbar\n"); return -1; } • //下面的命令建立状态指示栏 • if (!m_wndStatusBar.Create(this) ||!m_wndStatusBar. SetIndicators • (indicators,sizeof(indicators)/sizeof(UINT))) • { TRACE0("Failed to create status bar\n"); return -1; }

  44. 9.2 应用程序框架 • //下面的命令指定工具栏的停靠方式,允许停靠在窗口的任何位置 • m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); • EnableDocking(CBRS_ALIGN_ANY); • DockControlBar(&m_wndToolBar); • return 0; • } • //下面两个函数主要用于程序调试时的错误诊断 • #ifdef _DEBUG • void CMainFrame::AssertValid() const • { CFrameWnd::AssertValid(); } • void CMainFrame::Dump(CDumpContext& dc) const • { CFrameWnd::Dump(dc); } • #endif //_DEBUG

  45. 9.2 应用程序框架 • (3)文档类——MyDoc • 从CDocument类派生出来,主要用于存放应用程序的数据,同时实现数据的保存和装载功能; • // MyDoc.h • class CMyDoc : public CDocument{ • protected: • CMyDoc(); //构造函数 • DECLARE_DYNCREATE(CMyDoc) • public: • virtual BOOL OnNewDocument(); //菜单中的“新建”命令 • virtual void Serialize(CArchive& ar);//实现文件存盘和读取操作 • virtual ~CMyDoc(); //析构函数 • DECLARE_MESSAGE_MAP() • };

  46. 9.2 应用程序框架 • // MyDoc.cpp • #include "stdafx.h" • #include "My.h" • #include "MyDoc.h" • IMPLEMENT_DYNCREATE(CMyDoc, CDocument) • BEGIN_MESSAGE_MAP(CMyDoc, CDocument) • …… // MFC向导在这里添加宏映射的代码 • END_MESSAGE_MAP() • BOOL CMyDoc::OnNewDocument(){ • if (!CDocument::OnNewDocument()) • return FALSE; • …… // 可以在此添加程序代码,实现需要的功能 • return TRUE; • } • void CMyDoc::Serialize(CArchive& ar) • { if(ar.IsStoring()) • { …… // 可以在此添加数据保存的代码 • } • else • { …… // 可以在此添加读取数据的代码 • }

  47. 9.2 应用程序框架 • (4)视图类——MyView • 从CView类中派生出来,主要用于显示储存在文档对象中的数据; • // MyView.h • class CMyView : public Cview • { protected: • CMyView(); • DECLARE_DYNCREATE(CMyView) • public: • CMyDoc* GetDocument(); //获取与视图对应的文档指针 • virtual void OnDraw(CDC* pDC); //输出函数 • virtual BOOL PreCreateWindow(CREATESTRUCT& cs);//为窗口注册作准备 • protected: • //下面3个成员函数实现打印功能,分别对应打印前准备、打印、打印结束处理 • virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); • virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); • virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); • DECLARE_MESSAGE_MAP() • }; • inline CMyDoc* CMyView::GetDocument(){ return (CMyDoc*)m_pDocument; }

  48. 9.2 应用程序框架 • // MyView.cpp • #include "stdafx.h" • #include "My.h" • #include "MyDoc.h" • #include "MyView.h" • IMPLEMENT_DYNCREATE(CMyView, CView) • //下面的消息映射对应“文件”菜单的“打印、打印预览”菜单项 • BEGIN_MESSAGE_MAP(CMyView, CView) • ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) • ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) • ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) • END_MESSAGE_MAP()

  49. 9.2 应用程序框架 • 应用程序框架类之间的关系 ① class CMyApp : public CWinApp { virirtual BOOL InitInstance(); afx_msg void OnAppAbout(); DECLARE_MESSAGE_MAP() }; CMyApp theApp; ② ⑥ BOOL CMyApp::InitInstance() {pDocTemplate=new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CMyDoc), RUNTIME_CLASS(CMainFrame), RNTIME_CLASS(CMyView)); } class CAboutDlg : public CDialog {……}; ④ class CMainFrame : public CFrameWnd{ afx_msg int OnCreate(); DECLARE_MESSAGE_MAP() }; ⑤ ③ • class CMyDoc : public CDocument{ • virtual BOOL OnNewDocument(); • virtual void Serialize(CArchive& ar); • DECLARE_MESSAGE_MAP() • }; • class CMyView : public CView{ • CMyDoc* GetDocument(); • virtual void OnDraw(CDC* pDC); • DECLARE_MESSAGE_MAP() • };

  50. 9.2 应用程序框架 • ClassWizard • 类向导工具ClassWizard用于对应用程序框架进行修改,编辑或补充,所以ClassWizard是对应用程序中的类进行管理的重要工具; • ClassWizard的启动和界面介绍: • (1)启动ClassWizard: • (2)Message Maps选项卡:

More Related