我现在想要实现图形的剪切、粘贴,在剪切中我是这样实现的:
CDrawObject * drawObject;for (int i = 0; i < m_nGraphSelectNum; i++)
{
drawObject = GetGraph(GraphSelect[i].Index);
m_DrawObjectCopyArray.Add(drawObject);
}
GetGraph是得到m_DrawObjectArray.GetAt(Index)中的CDrawObject,我把界面上选中的所有图形都一个个加到一个拷贝Array中;在粘贴中我是这样做的:
for (int i = 0; i < (pDoc->m_DrawObjectCopyArray.GetUpperBound() + 1); i++)
{
pDrawObject = pDoc->m_DrawObjectCopyArray.GetAt(i);//从拷贝Array中取CDrawObject对象 nId_Only = pDoc->GetGraphID(); //得到新ID号
pDrawObject->m_nIdOnly = nId_Only; //更改ID号
pDoc->m_DrawObjectArray.Add(pDrawObject);//加入所有图形的链表中
GraphUndo[0].Index = pDoc->GetGraphUpperBound();//撤消用
GraphUndo[0].lb = 1;
pDoc->AddUndoList(2, 1, GraphUndo);
pDoc->AddSelectList(1, GraphUndo[0].Index, nId_Only);//把序号和ID号加入选中列表中
}
//以下为特殊显示当前粘贴的图形
for (i = 0; i < pDoc->m_nGraphSelectNum; i++)
{
pDoc->GetGraph(pDoc->GraphSelect[i].Index)->Move(20, 20);//在原来的坐标上偏移20个单位
pDoc->DrawGraph(&dc, pDoc->GraphSelect[i].Index, 0, 1, m_BackColor, blc);//特殊显示
}但是运行的结果是没有粘贴出线条,而且也没有什么异常,我调试了一下,m_DrawObjectArray中的数量在增多,说明已经添加了相关的数据,但是为什么界面上只显示原来剩下的几条线,而没有新粘贴的内容?????
CDrawObject * drawObject;for (int i = 0; i < m_nGraphSelectNum; i++)
{
drawObject = GetGraph(GraphSelect[i].Index);
m_DrawObjectCopyArray.Add(drawObject);
}
GetGraph是得到m_DrawObjectArray.GetAt(Index)中的CDrawObject,我把界面上选中的所有图形都一个个加到一个拷贝Array中;在粘贴中我是这样做的:
for (int i = 0; i < (pDoc->m_DrawObjectCopyArray.GetUpperBound() + 1); i++)
{
pDrawObject = pDoc->m_DrawObjectCopyArray.GetAt(i);//从拷贝Array中取CDrawObject对象 nId_Only = pDoc->GetGraphID(); //得到新ID号
pDrawObject->m_nIdOnly = nId_Only; //更改ID号
pDoc->m_DrawObjectArray.Add(pDrawObject);//加入所有图形的链表中
GraphUndo[0].Index = pDoc->GetGraphUpperBound();//撤消用
GraphUndo[0].lb = 1;
pDoc->AddUndoList(2, 1, GraphUndo);
pDoc->AddSelectList(1, GraphUndo[0].Index, nId_Only);//把序号和ID号加入选中列表中
}
//以下为特殊显示当前粘贴的图形
for (i = 0; i < pDoc->m_nGraphSelectNum; i++)
{
pDoc->GetGraph(pDoc->GraphSelect[i].Index)->Move(20, 20);//在原来的坐标上偏移20个单位
pDoc->DrawGraph(&dc, pDoc->GraphSelect[i].Index, 0, 1, m_BackColor, blc);//特殊显示
}但是运行的结果是没有粘贴出线条,而且也没有什么异常,我调试了一下,m_DrawObjectArray中的数量在增多,说明已经添加了相关的数据,但是为什么界面上只显示原来剩下的几条线,而没有新粘贴的内容?????
发过来,改后给你
正确的做法应该是在拷贝的时候,重新开辟空间,存放拷贝的内容,然后删除原来选中图形的时候,就不会影响被拷贝出来的图形!
void CDRAWDoc::EditCopy()
{
CDrawObject * drawObject; for (int i = 0; i < m_nGraphSelectNum; i++)
{
//drawObject = GetGraph(GraphSelect[i].Index));
drawObject = GetGraph(GraphSelect[i].Index)->Clone();
m_DrawObjectCopyArray.Add(drawObject);
}
}