我有一个dialog宣言在一个view(CMyview)里面,我用(CMyview*)GetParent(), 从此dialog里面取得Myview的指针。
可是我发现我这里取得的只是一个Myview类型的指针,并没有得到指向当前parent view类的对象指针,其中的成员变量的值都不对,请问如何才能够取得指向当前parent view类的对象指针。

解决方案 »

  1.   

    在对话框内声明一个公有变量 CMyView* m_pView;
    在显示对话框 这前设置进去: dlg.m_pView = this;然后在对话框内就可以用了,一般都这样实现, 因为对话框并不是 VIEW 子窗口,所以GetParent出来的不对
      

  2.   

    如果你的对话框是在View里面动态Create出来的,即使用
    BOOL Create( 
    LPCTSTR lpszTemplateName, 
    CWnd* pParentWnd = NULL );
    方法生成的用(CMyview*)GetParent()才能得到你想得到的view父窗口;
    如果只是DoModal,其父窗口并不是CMyview,你得到的只是CMyview强制转换的类型而已;
    如果在你dlg中想得到上层父窗口的指针,必须在创建对话框中记录父窗口的指针
    然后在你的view中调用这个对话框时候,将父窗口指针付给这个变量CMyDialog类中声明指针变量----------〉
    CMyView* m_pView;
    CMyView类中-------------------------〉
    CMyDialog dlg;
    dlg.DoModal;
    dlg.m_pView=this;
      

  3.   

    我这里的dialog是非模态dialog,用的是
    BOOL CTargetSetDlg::Create() 
    {
    return CDialog::Create(CTargetSetDlg::IDD);
    }
    可是用(CMyview*)GetParent()并没有得到的view父窗口的对象指针
      

  4.   

    无论是Create的还是Domodal的都不对的.因为你的对话框不是 子窗口风格,而是弹出窗口风格,用SPY++可以看到,这样的对话框 的实际父窗口是桌面
      

  5.   

    "有一个dialog宣言在一个view(CMyview)里面,我用(CMyview*)GetParent(), 从此dialog里面取得Myview的指针。"不太明白,既然Dialog源自CMyview,那么Dialog的Parent不就是CMyview么?
    强制转换:
    parent view* pView = (parent view*)GetParent();