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();
} }
////////////////////////////////////
响应WM_PAIN消息,把输出部分写道OnPain()函数里。
顺便问下:CMyEditorView是否继承自CFormView(这就对了)
onpain和ondraw有什么区别,
别人说,在view里用ondraw
你文档的数据结构可能有问题,相关声明和定义贴出来。
#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,第一项还输出不了,存盘再打开以前输入的数据也没了.
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已经被释放了
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就能显示了,如果释放了,那应该怎么改
还有谁能说一下opaint和ondraw有什么区别,怎么在ondraw就显示不了呢
黑 客 群:18605156
VC 群:18607590
ASP群:48490599
嵌 入 式 群:33956012加入请写名原因。
LINUX 群:18788803
经济、军事群:3685785
市场经济论坛(朋友的):48696408