热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

头都大了,怎样从对话框得到文档类指针?请求各位网友支援.

小弟现编一个数据传值的程序,由于功底不深请教各位大侠.CHhDocument为CDocument的派生类;CTtDialog为CDialog的派生类;在CTtDial
小弟现编一个数据传值的程序,由于功底不深请教各位大侠..........
CHhDocument为CDocument的派生类;
CTtDialog  为CDialog的派生类;
在CTtDialog 类中:
函数定义:
CHhDocument* GetDocument();
函数体:
CHhDocument* CTtDialog::GetDocument()
 {
  //返回文档类指针
 }
问题:
   按我上面的作法编译后提示定义有问题,怎样从对话框(CDialog的派生类)得到文档类指针?
我想在CDialog的派生类中定义一个返回文档类的指针的函数,但功底不深总出错,小弟都快疯了,请求各位网友支援.

9 个解决方案

#1



CMainFrame *pframe=(CMainFrame *)AfxGetMainWnd();
CHhDocument *pdoc=pframe->GetActiveDocument():

#2


GetActiveDocument()一楼正解

#3


在  HhView.cpp中加
CHhDocument*  g_pDoc;   //指向文档的全局变量
void CHhView::OnInitialUpdate() 
{
g_pDoc=GetDocument();  //指向文档的全局变量
         CView::OnInitialUpdate();
}
在  CTtDialog.cpp中加
#include "CHhDocument.h"
extern CHhDocument*  g_pDoc; 

这样在CTtDialog中就可以直接用g_pDoc了

#4


另一种方法
CWinApp* pApp=AfxGetApp();
ASSERT(pApp);
POSITION pos=pApp->GetFirstDocTmpPosition();
CDocTemplate* pTmp=pApp->GetNextDocTmp();//得到某个文档模板对象,视你的mfc程序具体情况而定
ASSERT(pTmp);
pos=pTmp->GetFirstDocTmpPostion();
CDocument* pDoc=pTmp->GetNextDoc(pos);//得到该文档模板对象的某个文档对象,视你的mfc程序,可以灵活编码
ASSERT(pDoc);
//这种方法可以适应任何情况,不管有多少文档类型或者多少文档对象,
记得给分

#5


全局变量始终不太好,破怀了程序的结构,而且如果关闭了文档,指针就失效了,而此时程序中无法察觉

#6


gzshd(郁闷)你好;
小弟用你给的代码编译,第二句pframe->GetActiveDocument()返回的是一个指向CDocument类的指针,指不到CHhDocument;
主框架为CMainFrame没错呀,希望师兄赐教.
u2m(UpToMe)(zp2126.myheart8541_cn(i++)也谢谢你们,小弟一定给分.
(大家感觉分少可以追加.)

#7


CHhDocument *pDoc;
pDoc=(CHhDocument *)pframe->GetActiveDocument();

#8


将文档类指针传到构造函数中去,然后再对话框中使用。
CDialog(C..Doc& pDoc,...)

#9


谢谢大家的支持,通过大家的支持我终于解决了这个问题。。。。。。。。。
这里再次谢谢大家特别是gzshd(郁闷)myheart8541_cn(i++)

推荐阅读
author-avatar
Max_coffee
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有