MFC Windows程序设计--文档/视图体系结构

文档/视图

SDI:一次至多打开一个文档。
MDI:允许同时打开多个文档。

文档/视图基础知识:
框架窗口:CFrameWnd或其派生类。
视图:框架窗口同大小子窗口 CView/CScrollView或其派生类。
文档对象:保存应用数据。CDocument或其派生类。
应用程序对象

再看InitInstance

CSingleDocTemplate *pDocTemplate;
pDocTemplate = new CSingleDocTemplate
    (
    IDR_MAINFRAME,
    RUNTIME_CLASS(CMyDoc),
    RUNTIME_CLASS(CMainFrame),
    RUNTIME_CLASS(CMyView)
    );
AddDocTemplate(pDocTemplate);

SDI应用程序只注册一个文档类型。
MDI可注册多个。

CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// 调CWinApp::OnFileNew启动应用
// 没文件名用空文档
// 有,用CWinApp::OpenDocumentFile加载一个文档。
// 这阶段,主结构用保存在文档模板中的信息创建文档,框架窗口,视图对象。
if(!ProcessShellCommand(cmdInfo))
{
    return FALSE;
}

文档对象

CDocument
几个非虚CDocument函数

函数名 说明
GetFirstViewPosition 返回POSITION
GetNextView 返回CView*
GetPathName 取得文档完整名
GetTitle 取得文档标题
IsModified 修改?
SetModifiedFlag
UpdateAllViews 调用每个与文档关联视图的OnUpdate

几个CDocument虚函数

函数名 说明
OnNewDocument 新文档被创建时由主结构调用
OnOpenDocument 从磁盘上装载文档时由主结构调用
DeleteContents 主结构用其删除文档内容。用于文档关闭前释放分配给文档的资源
Serialize 在文档,磁盘间输入,输出。文档被打开和关闭时由主结构调用
OnCloseDocument
OnSaveDocument
SaveModified
ReportSaveLoadException

SDI中,MFC只实例化文档对象一次,文档文件打开,关闭,创建时,文档对象还是那个。

// 文档数据由原始数据和可串行化类组成时,所有输入/输出可用<<,>>完成
// 对其它类型,可用CArchive::Read,CArchive::Write,CArchive::ReadString,CArchive::WriteString,CArchive::GetFile
void CMyDoc::Serialize(CArchive &ar)
{
    if(ar.IsStoring())
    {
        //
    }
    else
    {
        //
    }
}

视图对象

GetDocument () // 返回与视图关联的文档对象指针。
文档视图中,主结构产生WM_PAINT,创建CPaintDC对象,用指向该对象的指针调用视图的OnDraw。
CView的几个虚函数

函数名 说明
OnDraw 绘制显示
OnInitialUpdate 视图和文档绑定时
OnUpdate
OnActiveView

框架窗口对象

SDI:FrameWnd
MDI:CMDIFrameWnd。CMDIChildWnd。

// 动态对象创建
1.从CObject派生对象
2.
类声明中调用DECLARE_DYNCREATE
类实现中 IMPLEMENT_DYNCREATE

有关SDI文档模板的其它内容

文档字符串是一个字符串资源。由7个用’\n’分隔的子字符串组成。

1.标题。
2.新文档标题。
3.SDI中不用的一个。
4.文档类型名。如:”Drawing Files(*.drw)”
5.某类型文档的默认文件扩展名。如”.drw”
6.不带空格的名字来标识注册时的文档类型。如“Draw.Document”
7.描述文档类型。如“Microsoft Draw Document”
CString strDefExt;
pDocTemplate->GetDocString(strDefExt, CDocTemplate::filterExt);

1.::RegCreateKey,::RegSetValue和其它Win32注册函数将输入项加入注册表。
2.MFC中,调用CWinApp::RegisterShellFileTypes并在调用AddDocTemplate后传入一个TRUE,可在应用,关联文档,操作系统命令解释器间建立链接。

你可能感兴趣的:(Ui-Window-Mfc)