作者:Max_coffee | 来源:互联网 | 2023-05-18 23:37
小弟现编一个数据传值的程序,由于功底不深请教各位大侠.CHhDocument为CDocument的派生类;CTtDialog为CDialog的派生类;在CTtDial
小弟现编一个数据传值的程序,由于功底不深请教各位大侠..........
CHhDocument为CDocument的派生类;
CTtDialog 为CDialog的派生类;
在CTtDialog 类中:
函数定义:
CHhDocument* GetDocument();
函数体:
CHhDocument* CTtDialog::GetDocument()
{
//返回文档类指针
}
问题:
按我上面的作法编译后提示定义有问题,怎样从对话框(CDialog的派生类)得到文档类指针?
我想在CDialog的派生类中定义一个返回文档类的指针的函数,但功底不深总出错,小弟都快疯了,请求各位网友支援.
9 个解决方案
CMainFrame *pframe=(CMainFrame *)AfxGetMainWnd();
CHhDocument *pdoc=pframe->GetActiveDocument():
在 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了
另一种方法
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);
//这种方法可以适应任何情况,不管有多少文档类型或者多少文档对象,
记得给分
全局变量始终不太好,破怀了程序的结构,而且如果关闭了文档,指针就失效了,而此时程序中无法察觉
gzshd(郁闷)你好;
小弟用你给的代码编译,第二句pframe->GetActiveDocument()返回的是一个指向CDocument类的指针,指不到CHhDocument;
主框架为CMainFrame没错呀,希望师兄赐教.
u2m(UpToMe)(zp2126.myheart8541_cn(i++)也谢谢你们,小弟一定给分.
(大家感觉分少可以追加.)
CHhDocument *pDoc;
pDoc=(CHhDocument *)pframe->GetActiveDocument();
将文档类指针传到构造函数中去,然后再对话框中使用。
CDialog(C..Doc& pDoc,...)
谢谢大家的支持,通过大家的支持我终于解决了这个问题。。。。。。。。。
这里再次谢谢大家特别是gzshd(郁闷)myheart8541_cn(i++)