MFC把早期的窗口类的功能分成三个部分:数据存储、管理部分,数据显示与用户交互部分,管理窗口框的大小、标题、菜单条、状态条的窗框部分。
从而形成了三个类:CDocument、视图类CView和窗口框架类CFrameWnd。
上面的三个对象之间的关系类似于房屋的窗户,窗口框架类CFrameWnd相当于窗框,视图类CView相当于窗框上的玻璃,而文档类CDocument就相当于室内的物品。在房屋的外面,透过玻璃可以窥见室内的部分物品,作为房屋,它可以有多个窗户从不同的角度来查看房屋中的同一物品。
有两种类型的文档/视图结构程序:单文档界面(SDI)应用程序和多文档界面(MDI)应用程序。当用MFC AppWizard生成应用程序框架时,MFC AppWizard会自动以文档类CDocument为基类。如下:
class CMyDoc:public CDocument
{
private:
int Array[3];
protected:
CMyDoc();
DECLARE_DYNCREATE(CMyDoc)
public:
void SetMem(int i,int x);
int GetMem(int i);
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive &ar);
virtual ~CMyDoc();
DECLARE_MESSAGE_MAP()
};
CMyDoc::CMyDoc()
{
for(int i = 0; i < 3; i ++) Array[i] = 0;
}
void CMyDoc::SetMem(int i,int x)
{
Array[i] = x;
}
int CMyDoc::GetMem(int i)
{
return Array[i];
}
CView对象没有自己的边框,它的作用是为框架窗口提供用户区。
用MFC AppWizard生成应用程序时,会根据项目名字生成一个视图类,如项目名是MyPrj,则向导会生成一个CMyPrjView的类。
class CMyView:public CView
{
protected:
CMyView();
DECLARE_DYNCREATE(CMyView)
public:
CMyDoc *GetDocument();
virtual void OnDraw(CDC *pDC);
virtual BOOL PreCreateWindow(CREATESTRUCT &cs);
public:
virtual ~CMyView();
protected:
DECLARE_MESSAGE_MAP()
};
其中最重要的是GetDocument和OnDraw。
class CMainFrame:public CFrameWnd
{
protected:
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
public:
virtual ~CMyView();
protected:
DECLARE_MESSAGE_MAP()
};
&spm=1001.2101.3001.5002&articleId=83739664&d=1&t=3&u=906e895536ce4ec2a9101cb1ba621cef)
1万+

被折叠的 条评论
为什么被折叠?



