我用的是单文档类,在单文档中view类中调用一个自定义的的对话框,在对话框中我想调用父类view中的一个变量,应该怎么弄?
((CFatherDlg*)(CDialog*)GetParent->……好像不行吧,这个父类是对话框,但我的程序中子类的父类是个单文档view类啊?

解决方案 »

  1.   

    在构造子类完成后,将父类指针通过函数传递到子类的对象中去不就行了
    比如
    CDialog dlg;
    dlg.m_pParent=this;
    dlg.DoModal();
      

  2.   

    得到view类的指针就可以了,
    头上加#include "MainFrm.h" 
    (CXXXView*)(AfxGetMainWnd()->GetActiveView())
      

  3.   

    只需要调用一个变量很容易的啦!在CFatherDlg 定义一个和它一样的类型的变量比如 int t;在XXXView中的是:int a;
    在需要弹出对话框那里加上下面几句就行了:
    CFatherDlg dlg;
    dlg.t=a;
    dlg.DoModal();
    当然也可以在CFatherDlg 中定义XXXView类的一个指针:XXXView *view;
    CFatherDlg dlg;
    dlg.view=this;
    dlg.DoModal();在CFatherDlg 中就可以用view->...调用了
      

  4.   


    不行啊,我试过了,CView *p=(CImageProcessView*)(AfxGetMainWnd()->GetActiveView());
    p->……里面没有我自定义的响应函数以及变量出现啊?你能不能再说的具体点?谢谢
      

  5.   

    在父类中,创建子对话框时CDialog dlg; 
    dlg.m_pParent=this; 
    dlg.DoModal(); 然后在子对话框中就能用GetParent()得到父类View的指针了
      

  6.   

    CView *p=(CImageProcessView*)(AfxGetMainWnd()->GetActiveView()); 这句这样写:
    (CImageProcessView*)p=((CImageProcessView*)(AfxGetMainWnd()->GetActiveView())); 
    p->  
    就可以调用了,我也刚犯了这个低级失误。不要忘了加入view的头文件
      

  7.   

    上面的多了个括号,CView *p=(CImageProcessView*)(AfxGetMainWnd()->GetActiveView()); 这句这样写: 
    (CImageProcessView*)p=(CImageProcessView*)(AfxGetMainWnd()->GetActiveView()); 
    p->  
    就可以调用了,我也刚犯了这个低级失误。 不要忘了加入view的头文件
      

  8.   


    dlg.m_m_pParentWnd是保护类成员,在父类view中没法赋值啊。
      

  9.   

    还用GetParent()这个试试
    他返回的是CWnd* 你的view也是CWnd啊试试这样写:((Cxxxxview*)GetParent())->Cxxxxview 为你的具体的view类名在你的对话框类头文件中包含你的view类的头文件
      

  10.   

    确保你调用的函数应该是public 的