MFC是一个编程框架
MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序。MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法。AppWizard可以用来生成初步的框架文件。资源编辑器用于帮助直观的设计用户接口。ClassWizard用来协助添加代码到框架文件,最后,通过类库实现了应用程序特定的逻辑。
MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的。而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理。框架或者由其本身处理事件,不依赖程序员的代码,或者调用程序员的代码来处理应用程序特定的事件。
1. SDI生成
1.步骤dxq2009
首先,打开VC++6.0开发环境,然后,选择”File”菜单中的“New”子菜单,在弹出的对话框中选择“MFC AppWizard(exe)”项并在“Progect name”编辑框中输入合适的工程名字Simple1,如图,它的意思是创建一个基于MFC的应用,接着进入正式的创建过程,MFC应用程序的创建
过程有6步(基于对话框)或者6步(SDI或者MDI),下面首先介绍SDI应用的创建过程。
(1) 第一步用于选择应用的结构以及语言等。如图1,首先确定应用是否需要Doc/View Architecture Support支持,因为不使用该结构的应用不支持从磁盘文件打开文档,也没有派生于类CWnd的窗口客户区。上面3个单选按钮用于确定创建的应用类型,包括单文档,多文档,对话框,这里选择第一个。然后从资源列表框选择应用所使用的语言种类,单击“Next”。
图1
(2)第二步为用用程序选择4项数据库支持选项之一:如图2.如果选择了数据库支持,那么单击“Data Source”按钮,选择外部的数据库表项,一般按默认即可,单击“Next”。
图2
(3)第三步选择希望包含在应用中的复合文档支持项,同时判定是否启用标准的ActiveX资源,以及是否为应用的菜单条添加额外的自动化命令等,如图4,一般安默认,单击“Next”
图4
(4)第四步用于选择应用所需的基本用户接口特征,以及所想使用的工具栏类型,如图5,如果想要修改应用所使用的文件名和扩展名,或者想要调整应用的用户接口和框架风格,就单击“Advanced”,然后修改,一般默认,单击“Next”。
图5
(5)第五步设置工程的风格,Explorer风格的应用类似于资源管理器,标准MFC风格带有文件视图区域,还要判定是否希望应用向导在源文件中生成注释,最后选择MFC库时动态链接还是静态链接,如图6单击“Next”。
图6
(6)第六步可以更改由应用向导提供的默认类型,基类,头文件和实现文件名,对于视图,还可以更改它的基类,如图7,一般默认,单击”Finish”,在弹出的工程信息对话框中点击“OK”即结束应用的创建过程。
图7
2.MFC工程的成员类及全局对象
应用向导可以自动地生成MFC应用的各个C++类,另外,还能自动的生成一个类APP的全局对象theApp,如图8下面做简要说明。
图8
1.应用类及全局对象(CCExcmpleApp)
应用类封装了Windows应用的初始化,运行以及终止的全过程。对于每一个基于框架的应用,它必须有一个且只能有一个派生于CWinApp的类对象。这个对象是全局对象,因此它在创建任何窗口前首先被构造。类CWinApp提供了几个关键的可重载的虚成员函数,他们是Ini
tInstance,Run,ExitInstance以及OnIdle等。而且,在程序中可以随时调用全局函数AfxGetApp,以便获得CWinApp类对象的指针。
2.文档类(CCExcmpleDoc)
文档类实际上是一种数据结构,该类实现了对这种结构的封装以利于管理,通常,它不但包含应用中所需的数据,而且也包含了处理这些数据的方法,另外,文档类还可以为应用提供与其存储的数据相关的服务。
3.视图类(CCExcmpleView)
该类占有框架窗口的客户区,主要负责显示文档数据,也为文档对象和用户之间提供了用以交互的可视接口,另外,也完成了与文档打印相关的操作,通常,一般的绘制操作都是在该类中完成,因此有时也称视图类窗口为“绘制窗口”。
4.框架类(CMainFrame)
框架类表示应用程序的主框架窗口,其主要作用是响应标准的窗口消息,不过,它通常先将
消息按照一定的次序传递给视图类以及文档类等其他命令处理类,另外,它还为视图类提供可视化的边框,同时也包括标题栏,一些标准的窗口组件等。
5.“关于”对话框类(CAboutDlg)
该类封装了用于显示软件版本,版权等相关信息的“关于”对话框,通常不需要对它进行任何的编程。而只需要使用对话框资源编辑器对对话框模板进行简单的编辑即可。
3.源文件结构:
应用向导生成的应用程序具有很多原始的功能,例如:打开文件对话框等,而且还可以使用类向导向某个类添加成员函数或者成员变量,而且类向导可以将添加的成员安排在何时得位置。应用向导和类向导时怎么样实现这些自动功能呢?下面先浏览一下CCExcmpleView的头文件:
// CExcmpleView.h : interface of the CCExcmpleView class // ///////////////////////////////////////////////////////////////////////////// #if !defined(AFX_CEXCMPLEVIEW_H__4FEB3544_9956_4E4C_93C9_35D40796D187__INCLUDED_) #define AFX_CEXCMPLEVIEW_H__4FEB3544_9956_4E4C_93C9_35D40796D187__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CCExcmpleView : public CView { //Constructors protected: // create from serialization only CCExcmpleView(); DECLARE_DYNCREATE(CCExcmpleView) // Attributes public: CCExcmpleDoc* GetDocument(); // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CCExcmpleView) public: virtual void OnDraw(CDC* pDC); // overridden to draw this view virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); //}}AFX_VIRTUAL // Implementation public: virtual ~CCExcmpleView(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif 接口文档怎么看protected: // Generated message map functions protected: //{{AFX_MSG(CCExcmpleView) // NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #ifndef _DEBUG // debug version in CExcmpleView.cpp inline CCExcmpleDoc* CCExcmpleView::GetDocument() { return (CCExcmpleDoc*)m_pDocument; } #endif ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_CEXCMPLEVIEW_H__4FEB3544_9956_4E4C_93C9_35D40796D187__INCLUDED_) |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论