当前位置: 代码迷 >> VC/MFC >> Doc类的CArray成员变量怎的被View类的OnDraw函数调用呢
  详细解决方案

Doc类的CArray成员变量怎的被View类的OnDraw函数调用呢

热度:1124   发布时间:2016-05-02 03:57:36.0
Doc类的CArray成员变量怎样被View类的OnDraw函数调用呢?
想实现的目标:Doc类的OnOpenDocument读取一个文件,文件由许多组数据组成,每组数据的结构:

struct DayData
{
DWORD  m_lDate;

LONG    m_lOpenPrice;
LONG    m_lMaxPrice;
LONG    m_lMinPrice;
LONG    m_lClosePrice;

LONG    m_lMoney;
DWORD  m_lTotal;

LONG  m_lNoUse1;
LONG  m_lNoUse2;
LONG  m_lNoUse3;
};


按组读取到的数据,存在Doc类的成员变量 CArray<DayData,DayData> m_dayArray;中

请问存好的这些CArray数据,该怎样被View类使用呢?

void CT1View::OnDraw(CDC* pDC)
{
CT1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CArray<DayData,DayData>& m_dayArray = pDoc->m_dayArray;

我写的错在哪里了呢?麻烦前辈们指正,十分感谢

------解决思路----------------------
你把编译错误信息贴出来吧
------解决思路----------------------
一般,不建议lz这样使用DOC类的数据,会给自己很麻烦
View类在文档模板结构里,无非就是用于显示数据,在程序的任何位置要显示数据,一般只需要hDC参数,最多需要hWnd(其他一般都可以通过hWnd获得);
而数据本身是集中在DOC类,因此,最直接的办法是在doc类写显示函数

Doc::Draw(CDC*pDC)
{
................
}

在View的OnDraw中
{
xxxDoc*pDoc=GetDocument();
pDoc->Draw(pDc);
}

LZ感觉一下,这样写程序是否直截了当的多?
------解决思路----------------------
CArray没有你定义的模版类型的拷贝构造函数,你可以换成在CDocument里定义指针,CArray<xx,xx>* m_pArray;

楼上说的是常用做法,Draw函数通常封装在CDocument里,View里直接去调,这样才体现了MVC思想
------解决思路----------------------
CArray<DayData*,DayData*>
用指针
  相关解决方案