采用文档/视结构是,文档(CDOCUMENT)的实例是什么时候怎么建立的?

蓝天 2002-03-28 05:01:27
:)
...全文
86 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fhbkyo 2002-03-28
  • 打赏
  • 举报
回复
你们都说了, 那我说什么???
rovoboy 2002-03-28
  • 打赏
  • 举报
回复
哎,慢了一步
就给个实例好了

POSITION pos;
pos=((CMServerApp*)AfxGetApp())->m_pDocManager->GetFirstDocTemplatePosition();
CDocTemplate *pDocTemplate;
CString Str;
while(1)
{
pDocTemplate=((CMServerApp*)AfxGetApp())->m_pDocManager->GetNextDocTemplate(pos);
pDocTemplate->GetDocString(Str,CDocTemplate::regFileTypeId);
if(Str==TypeStr)break;
}
POSITION Pos;
CDocument *pDoc;
Pos=pDocTemplate->GetFirstDocPosition();
//在此建立
if(Pos==NULL)
pDocTemplate->OpenDocumentFile(NULL);
Pos=pDocTemplate->GetFirstDocPosition();
pDoc=pDocTemplate->GetNextDoc(Pos);
Pos=pDoc->GetFirstViewPosition();
pDoc->GetNextView(Pos)->GetParentFrame()->ActivateFrame();
zf925 2002-03-28
  • 打赏
  • 举报
回复

一.创建文档
ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew)
入口:CWinApp::OnFileNew
调用:CdocManager::OnFileNew()
1.判断有无文档模板,无则函数返回;
2.判断是否有多个文档模板,如有则启动文档模板选择对话框, 让用户选择一个模板后,返回模板指针.
3.由模板指针访问CMultiDocTemplate::OpenDocumentFile()
31.创建新文档对象
32.创建与新文档对象对应的子框架,构筑子框架,文档和视窗之间的关系
33.调用应用程序的OnNewDocument()
a.调用CDocument::OnNewDocument()
调用应用程序的DeleteContents();
b.用户代码
34.调用InitialUpdateFrame()显示视窗
35.返回文档指针
4.返回
二.打开文档
ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen)
入口:CWinApp::OnFileOpen
调用:CDocManager::OnFileOpen()
1.弹出对话框让用户选择待打开的文件,返回该文件的全路径名称, 供下面函数调用时使用.
2.调用应用程序的OpenDocumentFile(LPCTSTR lpszFileName)
21.用户代码
22.调用CWinApp::OpenDocumentFile(lpszFileName),
调用CWinApp::OpenDocumentFile(lpszFileName),
调用CDocManager::OpenDocumentFile
a.判断有无该文件的打开文档对象,有则激活该窗口并返回
b.调用CMultiDocTemplate::OpenDocumentFile()
b1.创建新的文档对象,创建新文档对象对应的子框架
b2.调用应用程序的OnOpenDocument()
(1)调用CDocument::OnOpenDocument()
.打开文件对象
.调用应用程序的DeleteDontents();
.建立与此文件对象相关联的CArchive对象
.调用应用程序文档对象的Serialize()函数
.关闭CArchive对象,文件对象
(2)显示该文件窗口
b3.返回

三.文件保存
ON_COMMAND(ID_FILE_SAVE,CDocument::OnFileSave)
入口:CDocument::OnFileSave()
调用:CDocument::DoFileSave()
如果当前文档对应的文件名为空或者为只读文件,以NULL 为参数调用CDocument::DoSave(NULL),否则,以当前文档对应的文件名为参数调用CDocument::DoSave(m_strPathName);

ON_COMMAND(ID_FILE_SAVEAS,CDocument::OnFileSaveAs)
入口:CDocument::OnFileSaveAs()
以NULL为参数直接调用CDocument::DoSave(NULL);
CDocument::DoSave(LPCTSTR lpszPathName,BOOL bReplace);
如果lpszPathName为NULL,
1.设定应用程序默认的文件名
2.打开通用文件保存对话框,由用户设定保存文件的名字,并返回该文件名
如果lpszPahtName不为NULL,则跳为以上两步,直接进入下一步
3.调用应用程序的OnSaveDocument()
31.用户代码
32.调用CDocument::OnSaveDocument()
a.创建或打开文件对象
b.建立相对应的CArchive对象
c.调用应用程序文档对象的序列化函数Serialize()
d.关闭文件对象,CArchive对象
e.设置文件未修改标志
4.返回

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧