|
发表于 2006-7-3 10:50:14
|
显示全部楼层
给你一个完整代码好了<BR>CDC* pDC = GetDC();//获得DC<BR> OnPrepareDC(pDC);//设置DC的滚动属性,与ScollView的滚动有关<BR><BR>UINT m_cfDraw=RegisterClipboardFormat("Draw_zgj");<BR>CBase *m_usrCurrentObject;<BR>CGraphDoc* pDoc = GetDocument();<BR>COleDataObject dataObject;<BR>//连接剪贴板<BR><BR>dataObject.AttachClipboard();<BR>if (dataObject.IsDataAvailable(m_cfDraw)) //判断指定的格式是否存在<BR>{ <BR> //得到内存文件指针<BR> CFile* pFile = dataObject.GetFileData(m_cfDraw);<BR> <BR> if (pFile != NULL)<BR> {<BR> //建立用于读取的文档对象<BR> CArchive ar(pFile, CArchive::load);<BR> TRY<BR> {<BR> //针对ar,调用对象的序列化函数。<BR> pDoc->m_CopyaObjects.Serialize(ar);<BR> }<BR> CATCH_ALL(e)<BR> {<BR> ar.Close();<BR> delete pFile;<BR> THROW_LAST();<BR> }<BR> END_CATCH_ALL<BR> ar.Close();<BR> delete pFile;//关键是这里,利用内存文件<BR> }<BR> <BR>}<BR>int xoffset=0,yoffset=0;<BR>int i;<BR>m_usrCurrentObject = pDoc->m_CopyaObjects[0];<BR>xoffset=PastePoint.x-m_usrCurrentObject->m_x1;<BR>yoffset=PastePoint.y-m_usrCurrentObject->m_y1;<BR>for(i = pDoc->m_CopyaObjects.GetSize()-1; i >= 0; i--)<BR>{ <BR> m_usrCurrentObject = pDoc->m_CopyaObjects;<BR> <BR> m_usrCurrentObject->m_x1+=xoffset;<BR> m_usrCurrentObject->m_x2+=xoffset;<BR> m_usrCurrentObject->m_y1+=yoffset;<BR> m_usrCurrentObject->m_y2+=yoffset;<BR> <BR>}<BR><BR>if(pDoc->m_CopyaObjects.GetSize()>300&&pDoc->m_aObjects.GetSize()>300){AfxMessageBox("粘贴大量元件会造成程序长时间无响应");return;}<BR>CopyToArray(&pDoc->m_CopyaObjects,&pDoc->m_aObjects,0);<BR>CopyToArray(&pDoc->m_CopyaObjects,&pDoc->m_TemplateObjects,1);<BR><BR> <BR><BR>//MoveSelGraph(&pDoc->m_CopyaObjects,point1.x,point1.y,5);<BR>Invalidate(); |
|