VC++(十三)文档与串行化

2016-11-22  本文已影响0人  侧漏的少年
void CGraphicView::OnFileWrite() 
{
    // TODO: Add your command handler code here
    CFile file("1.txt",CFile::modeCreate | CFile::modeWrite);
    CArchive ar(&file,CArchive::store);
    int i=4;
    char ch='a';
    float f=1.3f;
    CString str("http://www.sunxin.org");
    ar<<i<<ch<<f<<str;
}

void CGraphicView::OnFileRead() 
{
    // TODO: Add your command handler code here
    CFile file("1.txt",CFile::modeRead);
    CArchive ar(&file,CArchive::load);
    int i;
    char ch;
    float f;
    CString str;
    CString strResult;
    ar>>i>>ch>>f>>str;
    strResult.Format("%d,%c,%f,%s",i,ch,f,str);
    MessageBox(strResult);  
}
BOOL CGraphicDoc::OnNewDocument()

【文件\新建】命令处理的一部分。

BOOL CGraphicDoc::OnNewDocument()
{
    if (!CDocument::OnNewDocument())
        return FALSE;
    // TODO: add reinitialization code here
    // (SDI documents will reuse this document)
    SetTitle("http://www.sunxin.org");

    return TRUE;
}
IDR_MAINFRAME 
http://www.sunxin.org\nGraphic\nGraphi\nText Files(*.txt)\n
.txt\nGraphic.Document\nGraphi Document

修改窗口的文档标题

1、OnNewDocument()
2、IDR_MAINFRAME

主窗口标题栏上的字符串、默认文档的名称。

OnNewDocument()并不是一个消息响应函数。他只是一个虚函数。
CDocManager对象是文档管理器
CDocManager类维护一个CPtrList类型的链表m_templateList(即文档模板链表,实际上,MFC的设计者在MFC的实现中大量使用了链表这种数据结构)

BOOL CSDIExampleApp::InitInstance()
{
…
    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CSDIExampleDoc),
    RUNTIME_CLASS(CMainFrame),// main SDI frame window
    RUNTIME_CLASS(CSDIExampleView));
    AddDocTemplate(pDocTemplate);
…
    return TRUE;
}
点击【文件\新建】命令。
程序调用BOOL CGraphicDoc::OnNewDocument()。
CWinApp的OnFileNew()
调用
CDocManager的OnFileNew()
调用
CDocTemplate* pTemplate
pTemplate->OpenDocumentFile(NULL);纯虚函数
调用
CSingleDocTemplate的OpenDocumentFile(NULL);
调用了pDocument对象的OnNewDocument()函数
第一次启动程序时,OpenDocumentFile函数内部创建了文档类对象,
同时还创建了框架类对象和视类对象。这就是MFC提供的文档/视类结构的特点。
每当有一份文档产生时,总是会产生一个文档类对象、
框架类对象和视类对象,他们三位一体来为这份文档服务。

文档模板管理文档类、控件类和视类对象,而他自身则是由文档管理器管理的。

点击【文件\打开】命令。
程序调用BOOL CGraphicDoc::Serialize()。
CWinApp的OnFileOpen()
调用
CDocManager的OnFileOpen()
调用
CDocManager的DoPromptFileName()(弹出文件打开对话框)
然后
CWinApp的OpenDocumentFile()
回到
CDocManager的OpenDocumentFile()
调用
CSingleDocTemplate类的OpenDocumentFile()函数
调用
文档对象的OnOpenDocument()
调用
Serialize函数
上一篇下一篇

猜你喜欢

热点阅读