深度说明VS2003 MFC程序框架(深入解析VS2003 MFC程序框架)
原创
一、引言
Visual Studio 2003(VS2003)是微软推出的一款集成开发环境,它提供了多种编程语言的开发拥护,其中包括基于MFC(Microsoft Foundation Classes)的C++程序开发。MFC是一个用于构建桌面应用程序的C++类库,它封装了Windows API,允许开发者可以更加方便地创建具有充足用户界面的应用程序。本文将深入解析VS2003 MFC程序框架,帮助开发者更好地懂得和掌握MFC编程。
二、MFC程序框架概述
MFC程序框架是基于文档/视图结构的,它将应用程序分为两个核心部分:文档和视图。文档负责数据的存储和管理,视图负责数据的显示和用户交互。以下是MFC程序框架的核心组成部分:
- 应用程序类:负责应用程序的启动和终止,以及消息循环。
- 文档类:负责数据的存储和管理。
- 视图类:负责数据的显示和用户交互。
- 主框架窗口类:负责应用程序的主窗口。
- 文档模板类:负责创建和管理文档、视图和框架窗口。
三、应用程序类
应用程序类(CWinApp)是MFC程序框架的核心,它负责应用程序的启动和终止,以及消息循环。以下是一个典型的应用程序类的定义:
class CMyApp : public CWinApp
{
public:
CMyApp();
virtual ~CMyApp();
virtual BOOL InitInstance();
// 其他成员函数
};
其中,InitInstance()函数是应用程序启动时调用的第一个函数,它负责创建主框架窗口、文档模板等。以下是一个简化的InitInstance()函数的实现:
BOOL CMyApp::InitInstance()
{
AfxEnableControlContainer();
// 创建文档模板
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_MAINFRAME,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CChildFrame), // 主框架窗口类
RUNTIME_CLASS(CMyView));
AddDocTemplate(pDocTemplate);
// 创建主框架窗口
CMainFrame* pMainFrame = new CMainFrame;
m_pMainWnd = pMainFrame;
// 显示和更新主框架窗口
pMainFrame->ShowWindow(SW_NORMAL);
pMainFrame->UpdateWindow();
return TRUE;
}
四、文档类和视图类
文档类(CMyDoc)和视图类(CMyView)分别负责数据的存储和管理,以及数据的显示和用户交互。以下是一个简化的文档类和视图类的定义:
class CMyDoc : public CDocument
{
public:
CMyDoc();
virtual ~CMyDoc();
// 文档数据成员
CString m_strData;
// 文档操作函数
virtual BOOL OnNewDocument();
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
};
class CMyView : public CView
{
public:
CMyView();
virtual ~CMyView();
// 视图操作函数
virtual void OnDraw(CDC* pDC);
};
文档类通常包含数据的成员变量和操作数据的成员函数,例如OnNewDocument()和OnOpenDocument()。视图类负责将文档数据渲染到屏幕上,它通常重写OnDraw()函数来实现数据的显示。
五、主框架窗口类
主框架窗口类(CMainFrame)负责应用程序的主窗口,它继承自CFrameWnd类。以下是一个简化的主框架窗口类的定义:
class CMainFrame : public CFrameWnd
{
public:
CMainFrame();
virtual ~CMainFrame();
// 窗口操作函数
virtual void OnSysCommand(UINT nID, LPARAM lParam);
virtual void OnClose();
};
主框架窗口类通常包含菜单、工具栏、状态栏等界面元素,以及消息处理函数。OnSysCommand()函数用于处理系统菜单命令,OnClose()函数用于处理窗口关闭事件。
六、文档模板类
文档模板类(CMultiDocTemplate)负责创建和管理文档、视图和框架窗口。以下是一个简化的文档模板类的定义:
class CMyDocTemplate : public CMultiDocTemplate
{
public:
CMyDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass = RUNTIME_CLASS(CMDIChildWnd),
CRuntimeClass* pViewClass = RUNTIME_CLASS(CView))
: CMultiDocTemplate(nIDResource, pDocClass, pFrameClass, pViewClass)
{
}
// 文档模板操作函数
virtual CDocument* CreateNewDocument();
virtual void OpenDocumentFile(LPCTSTR lpszPathName);
};
文档模板类通过构造函数接收资源ID、文档类、框架窗口类和视图类的运行时类信息,创建新的文档、视图和框架窗口实例。CreateNewDocument()函数用于创建新文档,OpenDocumentFile()函数用于打开现有文档。
七、消息处理机制
MFC程序框架采用消息映射机制来实现消息处理。每个MFC类都可以通过消息映射宏来声明消息处理函数。以下是一个简化的消息映射示例:
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND(ID_FILE_NEW, &CMyView::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, &CMyView::OnFileOpen)
END_MESSAGE_MAP()
在这个示例中,CMyView类通过ON_COMMAND宏声明了两个消息处理函数:OnFileNew和OnFileOpen,分别用于处理文件新建和文件打开命令。
八、总结
MFC程序框架为开发者提供了一套完整的C++类库,用于构建基于Windows平台的桌面应用程序。通过深入懂得MFC程序框架的各个组成部分,如应用程序类、文档类、视图类、主框架窗口类和文档模板类,开发者可以更加高效地开发出具有充足用户界面的应用程序。同时,MFC的消息处理机制允许开发者能够方便地处理用户输入和系统事件,节约应用程序的响应性能。