void   CMyEditorView::OnButtonCar() 

//   TODO:   在此添加命令处理程序代码 
UpdateData();//add
CMyEditorDoc*   pDoc   =   GetDocument(); 
ASSERT_VALID(pDoc); 
  CCarDlg     MyCarDlg; 
  if(MyCarDlg.DoModal()==IDOK) 
  {   
  m_Car.SetCarValues   (MyCarDlg.m_CarNumber   ,MyCarDlg.m_CarType   ,MyCarDlg.m_Color   ,MyCarDlg.m_MaxSpeed   ); 
  pDoc- >AddCar   (m_Car); 
  Invalidate(); 
  
  } } 

解决方案 »

  1.   

    MyCarDlg已经销毁了,要在MyCarDlg的OnOK()按值传回来
      

  2.   

    检查CCar类是否有进行宏定义DECLARE_SERIAL,使用IMPLEMENT_SERIAL宏指明类名及版本号并实现了Serialize()函数,并且在其中调用基类的序列化函数;
      

  3.   

    程序好象就没运行到ONDRAW这步这是为什么
      

  4.   

    MyCarDlg.DoModal()之后已经销毁了
      

  5.   

    程序好象就没运行到ONDRAW这步这是为什么
    ////////////////////////////////////
    响应WM_PAIN消息,把输出部分写道OnPain()函数里。
    顺便问下:CMyEditorView是否继承自CFormView(这就对了)
      

  6.   

    class CMyEditorView : public CEditView
    onpain和ondraw有什么区别,
    别人说,在view里用ondraw
      

  7.   

    在文档中刷新界面用UpdateAllViews。
    你文档的数据结构可能有问题,相关声明和定义贴出来。
      

  8.   

    #pragma once
    #include "afxcoll.h"#include "Car.h"
    class CMyEditorDoc : public CDocument
    {
    protected: // 仅从序列化创建
    CMyEditorDoc();
    DECLARE_DYNCREATE(CMyEditorDoc)
    // 属性
    public:// 操作
    public:// 重写
    public:
    virtual BOOL OnNewDocument();
    virtual void Serialize(CArchive& ar);// 实现
    public:
    virtual ~CMyEditorDoc();
    #ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
    #endifprotected:// 生成的消息映射函数
    protected:
    DECLARE_MESSAGE_MAP()
    CObArray m_oaCars;
    public:
    short GetCount();
    public:
    CCar *GetCar(short nIndex);
    public:
    CCar *AddCar(CCar Car);
    };
    void CMyEditorDoc::Serialize(CArchive& ar)
    {
    // CEditView 包含一个处理所有序列化的编辑控件

    reinterpret_cast<CEditView*>(m_viewList.GetHead())->SerializeRaw(ar);
    }这个序列化用改不?
    还有MaxSpeed输出总是0,第一项还输出不了,存盘再打开以前输入的数据也没了.
      

  9.   

    使用指针(CCar*)CCarDlg     MyCarDlg;
      if(MyCarDlg.DoModal()==IDOK)
      {  
      m_Car.SetCarValues   (MyCarDlg.m_CarNumber   ,MyCarDlg.m_CarType   ,MyCarDlg.m_Color   ,MyCarDlg.m_MaxSpeed   );
      pDoc- >AddCar   (m_Car);
      Invalidate();
     
      } 
    //当执行OnDraw的时候,m_Car已经被释放了
      

  10.   


    short CMyEditorDoc::GetCount(void)
    {
    return m_oaCars.GetSize() ;
    }CCar* CMyEditorDoc::GetCar(short nIndex)
    {


    return (CCar*)m_oaCars[nIndex];
    }CCar* CMyEditorDoc::AddCar(CCar Car)
    {
    CCar* pCar =new CCar(Car);
    m_oaCars.Add (pCar); SetModifiedFlag(); return pCar;
    }
    把m_car存在了m_oaCars中了,为什么我在veiw中用onpain就能显示了,如果释放了,那应该怎么改
      

  11.   

    现在是我在onpaint里可以在文本中显示,但是保存以后再打开看不到保存的数据,
    还有谁能说一下opaint和ondraw有什么区别,怎么在ondraw就显示不了呢
      

  12.   

    欢 迎 大 家 加 入:
    黑 客 群:18605156
    VC 群:18607590
    ASP群:48490599
    嵌 入 式 群:33956012加入请写名原因。
    LINUX 群:18788803
    经济、军事群:3685785
    市场经济论坛(朋友的):48696408