CVgExaView不是继承于CView,(继承Vega中的view 类:zsVegaView),在一个对话框中定义成员变量:CVgExaView* m_pView,对话框中的一个按钮点击,用 m_pView调用 CVgExaView类中的成员函数,为什么一单击按钮程序就出问题,结束了?

解决方案 »

  1.   

    CVgExaView* m_pView这只是个指针哦, new出来没...?
    m_pView = new CVgExaView; ?
      

  2.   

    MARK,
    没用过这个,关注一下
      

  3.   

    Mackz(在相互) :
      我是新手,没怎么看明白,能详细说说吗?
      

  4.   

    创建对话框时,有没有把CVgExaView的指针传进来?
      

  5.   

    m_pView是CVgExaView类型的指针,那么必须在使用这个指针前把m_pView指向一个已经存在的CVgExaView的变量实例,否则m_pView为空指针(没赋值的指针)!只有赋过值的指针才能使用
      

  6.   

    在CVgMFCView中调用对话框:
    void CVgMFCView::OnGfxEnv() 
    {
    // TODO: Add your command handler code here
             CEvnDlg* pEvnDlg=new CEvnDlg();   //CEvnDlg是对话框类
    pEvnDlg->Create(IDD_EVN_DLG,this);
    pEvnDlg->ShowWindow(SW_SHOW);
    }对话框类的构造函数:在对话框类中定义成员变量:CVgMFCView* m_pVgView
    CEvnDlg::CEvnDlg(CVgMFCView* pParent /*=NULL*/)
    : CDialog(CEvnDlg::IDD, pParent),m_pVgView(pParent)
    {
    //{{AFX_DATA_INIT(CEvnDlg)
    // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT

    }然后在对话框类中响应按钮消息:
    void CEvnDlg::OnCheckFog() 
    {
    // TODO: Add your control notification handler code here
       m_pVgView->toggleGfx(VGGFX_FOG);}//toggleGfx(VGGFX_FOG);是CVgMFCView的成员函数这个时候程序就出错了。
      

  7.   

    CEvnDlg* pEvnDlg=new CEvnDlg(); //CEvnDlg是对话框类CEvnDlg::CEvnDlg(CVgMFCView* pParent /*=NULL*/)
    : CDialog(CEvnDlg::IDD, pParent),m_pVgView(pParent)很显然,pVgView没有初始化,应该是这样CEvnDlg* pEvnDlg=new CEvnDlg(this);
      

  8.   

    pandera(一条自在的鱼):CEvnDlg* pEvnDlg=new CEvnDlg(this);和pVgView初始化没有关系吧
      

  9.   

    CEvnDlg* pEvnDlg=new CEvnDlg(this);
    memset( pEvnDlg, 0, sizeof( CEvnDlg ) );---
    ....