请教VC++6.0编程中文档视图编程问题(CObArray类的使用)
问题:自定义了一个基类CBase
class CBase : public CObject
{
public:
int m_nType;
CString m_strName;
int m_nCode;
CRect m_textRect;
CPoint center;
public:
CBase();
virtual ~CBase();
virtual void Draw(CDC *pDC);
};
定义了三个派生类
class A1:public CBase
{
public:
变量1;
变量2;
...
变量n;
变量n+1
...
public:
void Draw(CDC *pDC);//用来绘制图形
}
派生类A2,A3和A1类似,在文档类种添加一个函数Draw(CDC *pDC)
Doc.h中定义了CObArray指针对象*myobarray
CObArray myobarray;
Doc.cpp的Draw(CDC *pDC)函数中进行数据的传入
Draw(CDC *pDC)
{
myobarray=new CObArray();
A1 *a1,*a2....
a1=new A1();
a1->变量1;
a1->变量2;
...//变量n,n+1...没有赋值,他们的值在视图中变化
myobarray->ADD(a1);
a2->变量1;
a2->变量2;
...
...//变量n,n+1...没有赋值,他们的值在视图中变化
myobarray->ADD(a);
//类A2,A3的对象的赋值和往对象数组myobarray中存入与前相同
然后绘制图形
int nCount=myobarray->GetSize();
for(int i=0;i<nCount;i++)
{
((CBase*)(myobarray->GetAt(i)))->Draw(pDC);
}
}
文档类数据输入完后,在视图类的OnDraw()函数中调用文档类函数Draw()
即:pDoc->Draw(pDC);
此时,运行,图形可以显示。问题是:1、在视图类中是否可以访问myobarray的类对象A1 *a1,*a2...A2 *a1,*a2...中变量n,变量n+1,若能访问,如何去访问?访问是否是这样子的?
int nCount=pDoc->myobarray->GetSize();
for(int i=0;i<nCount;i++)
{
((A1*)(pDoc->myobarray->GetAt(i)))->变量n;//这个地方是否可以直接给变量n赋值,此赋值的结果会不会改变相应的类对象的变量值,
此值在A1类的Draw()函数中用到,根据变量的值来改变图形显示
}
2、比如说在视图类中添加鼠标左键按下函数,在此函数中当左键在一定的区域(比方一个正方形范围内)按下以后,需要改变A1类中的一个变量值,而且只改变按下范围所对应的A1类对象的变量值,其他A1类对象相应的变量值不改。也就是说,一个A1类对象和一个鼠标左键按下对应,鼠标按下的位置,只有相应的A1类的对象的变量值做变化,此变量值变化以后图形也要做相应的变化,如何去实现实时更新的这种变化?