请教高手一个关于文档/视图类中新建一个文档的问题?

No9 2001-07-29 04:25:57
请问各位高人,谁知道在文档/视图类是如何新建一个文档的?
其过程是这样的?能否详细的描述一下?
如何在自己的函数中新建一个空文档呢[函数在CMainFrame类中]?
谢谢!
...全文
198 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
No9 2001-08-08
  • 打赏
  • 举报
回复
最后我还有一个不太明白的问题,想请教一下,就是上面我说的那个问题,
其内容为:
[请教简单问题——关于视图更新] --30
比如我的视图类CTestView的基类为CFormView类,其中有一个编辑控件,其对应变量为CString m_oPriceEdit;
对应文档类为CTestDoc,其对应视图类的变量double m_fNewPrice;
现在我想用设置文档类变量m_fNewPrice=2.0f,如何让它的编辑框中也显示2.0呢?应该如何编写更新视图类的代码呢?
谢谢!
请访问帖子:
http://www.csdn.net/expert/topic/229/229096.shtm
No9 2001-08-08
  • 打赏
  • 举报
回复
非常谢谢 谢晟老兄!在您的帮助下我已经解决了这个问题!
由于这两天我的Win2000系统崩溃了,一些数据也丢失了,因此一直忙于修复系统,所以没有来得及给您加分,耽误了几天,非常抱歉!

今天系统终于正常了,在下不敢再耽搁了,现在开始加分!
请查收!
蒋晟 2001-08-06
  • 打赏
  • 举报
回复
建议不要在视图中存储数据,文档才是存储数据的地方。
in CMyFormmView::DoDataExchange(CDataExchange* pDX){
CMyDoc* pDoc=GetDocument();
......
//不要在MFC注释里面写
   DDX_Text(pDX,IDC_PRICE,pDoc->m_fNewPrice);
}
No9 2001-08-05
  • 打赏
  • 举报
回复
jiangsheng(蒋晟),我同意你的观点!

我想举个例子以便说的更详细一些:
比如我的视图类CTestView的基类为CFormView类,其中有一个编辑控件,其对应变量为CString m_oPriceEdit;
文档类为CTestDoc,对应视图类的变量m_fNewPrice;
现在我想用两种方法建立空文档,一种是直接使用默认的方法建立,另外一种是自定义内容的方法,即新建一个空文档时直接将m_fNewPrice赋值为2.0,同时编辑框中也显示2.0;
应该如何编写代码?
蒋晟 2001-08-03
  • 打赏
  • 举报
回复
设断点看看Document的内容。

界面上没有变化不代表数据也没有变化。
No9 2001-08-03
  • 打赏
  • 举报
回复
To Suddy(风):
串行化?不行的!
我意思好像没有说明白。
我是象PowerPoint中向导那样,当然也允许创建空文档的,如何直接几下串行化的话,将不能再创建空文档了!
No9 2001-08-03
  • 打赏
  • 举报
回复
To jiangsheng(蒋晟):
首先谢谢您的代码!
但我还是有点不太明白。
我使用下面的代码调用您写的函数:
POSITION pos=GetFirstDocTemplatePosition();
CDocTemplate *pDocTemplate=GetNextDocTemplate(pos);
CTestDoc *pDocument=(CTestDoc *)CreateNewFrameViewDoc( (CMultiDocTemplate *)pDocTemplate );
然后使用下面的代码用所得到的文档指针将其变量赋值,
pDocument->m_fNewPrice=2.0f;
最后更新视图显示,
pDocument->UpdateAllViews(NULL);
最终发现没有任何变化,这是为什么?
是我的使用方法不对吗?
Suddy 2001-08-02
  • 打赏
  • 举报
回复
串行化就行了
蒋晟 2001-08-02
  • 打赏
  • 举报
回复
CDocument* CDoorCtrlApp::CreateNewFrameViewDoc(CMultiDocTemplate* pDocTemplate)
{
POSITION posDoc=pDocTemplate->GetFirstDocPosition();
CDocument* pDocument =NULL;
if(posDoc!=NULL){
pDocument =pDocTemplate->GetNextDoc(posDoc);
//To get the first view in the list of views:

POSITION posView = pDocument ->GetFirstViewPosition();
while(posView){//modified for viewbar
CView* pFirstView = pDocument ->GetNextView(posView);
ASSERT(pFirstView !=NULL);
pFirstView ->GetParentFrame()->GetLastActivePopup()->BringWindowToTop();
}
return pDocument;
}
else{
pDocument =pDocTemplate->CreateNewDocument();
if (pDocument == NULL)
{
TRACE0("CDocTemplate::CreateNewDocument returned NULL.\n");
AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);
return NULL;
}
ASSERT_VALID(pDocument);
CString strTitle;
pDocTemplate->GetDocString(strTitle,CDocTemplate::windowTitle);
pDocument->SetTitle(strTitle);
BOOL bAutoDelete = pDocument->m_bAutoDelete;
pDocument->m_bAutoDelete = FALSE; // don't destroy if something goes wrong
CFrameWnd* pFrame = pDocTemplate->CreateNewFrame(pDocument, NULL);
pDocument->m_bAutoDelete = bAutoDelete;
if (pFrame == NULL)
{
AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);
delete pDocument; // explicit delete on error
return NULL;
}
ASSERT_VALID(pFrame);
if (!pDocument->OnNewDocument())
{
// user has be alerted to what failed in OnNewDocument
TRACE0("CDocument::OnNewDocument returned FALSE.\n");
pFrame->DestroyWindow();
return NULL;
}
// it worked, now bump untitled count
pDocTemplate->InitialUpdateFrame(pFrame ,pDocument,TRUE);
pFrame->ShowWindow(SW_SHOWMAXIMIZED);
}
return pDocument ;
}
No9 2001-08-02
  • 打赏
  • 举报
回复
对了,就是象PowerPoint中向导那样,不是一个空文档,而是有一些数据的文档!
不知道它是如何实现的,所以我认为应该理解一些其实现过程!
No9 2001-08-02
  • 打赏
  • 举报
回复
是的,我看过了,里面很复杂,函数套函数,主要是文档模板类的。
我现在想知道的是如何在新建文档后添加一些我要的数据!
EaseWay 2001-08-02
  • 打赏
  • 举报
回复
有MFC的源码吧,在你的Application中重载OnFileNew,如下:
CXXApp::OnFileNew()
{
CWinApp::OnFileNew();
}
直接Trace进去就可以看到全部过程
No9 2001-08-02
  • 打赏
  • 举报
回复
我真的好着急呀!
有没有什么VC高手云集的论坛呀?
No9 2001-08-02
  • 打赏
  • 举报
回复
难道真的没有高手了吗?
600000 2001-08-01
  • 打赏
  • 举报
回复
关注!
No9 2001-07-31
  • 打赏
  • 举报
回复
我已经明白了一些,在CWinApp类调用OnFileNew()函数就可以新建文档了。
但如何在CWinApp类得到和使用所新建文档的视图类或者文档类呢?
No9 2001-07-31
  • 打赏
  • 举报
回复
我觉得还是有点不太明白的地方,不知道这里有没有高手呀!
帮忙解释一下,好吗?
在下先谢过了!
No9 2001-07-30
  • 打赏
  • 举报
回复
我已经找到了,正在研究……

也期盼各位高手能提供宝贵的解答!
wjyasd 2001-07-29
  • 打赏
  • 举报
回复
1 在索引中 键入 CDocTemplate 回车
2 在弹出的3个选项中选 1
3 出现 CDocTemplate 的简介
走道最下面 找到
For more information on CDocTemplate, see Document Templates and the Document/View Creation Process in Visual C++ Programmer's Guide.

4 点击 连接就可以了…… Document Templates and the Document/View Creation Process

5 慢慢看了,还有其他的一些连接……

No9 2001-07-29
  • 打赏
  • 举报
回复
能说一下在MSDN中的位置呢?
加载更多回复(2)

16,472

社区成员

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

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

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