读书人

一个链表保存两个绘图的类如何分别把

发布时间: 2013-02-20 12:23:22 作者: rapoo

一个链表保存两个绘图的类,怎么分别把他们取出来
CObList list; 在DOC中定义


下面是这两个的类分别加进链表的代码


void CpenView::OnLButtonDown(XXXXXXX) //鼠标函数
{

CpenDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

if(m_Type==1)//选择线
{
Line=new CLine();
pDoc->list.AddTail(Line); //图元“线”加入链表
Line->Start(point);
Line->End(point);
}
else
{
Ellipse=new CEllipse();
pDoc->list.AddTail(Ellipse); //图元“圆”加入链表
Ellipse->Start(point);
Ellipse->End(point);
}

}



void CpenView::OnLButtonUp(XXXXXXX) //鼠标函数
{
......
...

if(m_Type==1)//选择线
Line->End(point);
else
Ellipse->End(point);
...

}




void CpenView::OnDraw(CDC* pDC) //画图部分
{
CpenDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);


CObList *p=&(GetDocument()->list); //取得链表地址

POSITION pos =p->GetHeadPosition(); //链表头的位置

while(pos)
{
if(m_Type==1)
{
CLine* mLine=(CLine*)p->GetNext(pos); //下一个指针
mLine->DrawL(pDC);
}
if(m_Type==2)
{
CEllipse* mEllipse=(CEllipse*)p->GetNext(pos);
mEllipse->DrawE(pDC);
}
}
}
我画了几段线段后改为圆来画。
但是当鼠标敲下时,在已经画过直线的地方,居然刷的一下全部变成了圆!!!
我想做的是把圆和线分开 。而不是共用一个坐标记录。
[解决办法]
list 里 应该 包括 类型。
[解决办法]
你可以存入指针

所有的类型继承cshape

然后根据多态 来调用相关类型!

读书人网 >VC/MFC

热点推荐