www.pudn.com > 44757463.rar > Core.cpp


// Core.cpp: implementation of the CCore class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "graphsoft.h" 
#include "Core.h" 
#include "CoreLog.h" 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CCore::CCore(CGraphSoftDoc*  pDoc,CGraphSoftView* pView) 
{ 
	m_pDoc=pDoc; 
	m_pView=pView; 
	m_bEnableUndo=FALSE; 
	m_bSendMessageLog=FALSE; 
	m_pLog=new CCoreLog(); 
} 
 
CCore::~CCore() 
{ 
	delete m_pLog; 
} 
 
//////////////////////////////////////////////////////////////////// 
 
void CCore::OnEditUndo() 
{	 
	CWaitCursor wait; 
	m_pLog->OnEditUndo(this); 
} 
 
void CCore::OnEditRedo() 
{ 
	CWaitCursor wait; 
	m_pLog->OnEditRedo(this); 
} 
 
BOOL CCore::IsAbleToUndo() 
{ 
	//	return (m_bEnableUndo && m_pLog->IsAbleToUndo() && !m_bPowerStageMode2); 
	return (m_pLog->IsAbleToUndo()); 
} 
 
BOOL CCore::IsAbleToRedo() 
{ 
	//	return (m_bEnableUndo && m_pLog->IsAbleToRedo() && !m_bPowerStageMode2); 
	return (m_pLog->IsAbleToRedo()); 
} 
 
void CCore::EnableUndo(BOOL bFlag) 
{ 
	m_bEnableUndo = bFlag; 
} 
BOOL CCore::WriteLogString(CString text) 
{ 
	m_pLog->WriteLogString(text); 
	return true; 
} 
void CCore::AddUndoItem(CUND_Base* pUndo) 
{ 
	m_pLog->AddUndoItem(pUndo); 
} 
void CCore::DelLastUndoItem() 
{ 
	m_pLog->DelLastUndoItem(); 
} 
////////////////////////////////////////////////////////////////////// 
// MODULE   :DrawGraph 
// ABSTRACT :绘画/清空图形 
// FUNCTION :一般在撤消/恢复中用到 
// NOTE     : 
// RETURN   : 
// ARGUMENTS: 
//              I/O           TYPE      NAME       EXPLANATION 
//               I              BOOL     bFlag      TRUE-Draw  FALSE-Clear 
// CREATE   :  FNST)handwolf  2004-4-23 
// UPDATE   :   
//          : Modify reason 
////////////////////////////////////////////////////////////////////// 
 
void CCore::DrawGraph(CShape* pShape,BOOL bFlag) 
{ 
	CDC* pDC=CDC::FromHandle(GetDC(m_pView->GetSafeHwnd())); 
	m_pView->OnPrepareDC(pDC); 
	if(!bFlag){ 
		pShape->DrawCutToRect(pDC,RGB(255,255,255),RGB(255,255,255),m_pView->m_rectTarget,m_pView->m_rectMaxWindow); 
	}else{ 
			pShape->DrawCutToRect(pDC,m_pView->m_rectTarget,m_pView->m_rectMaxWindow); 
	} 
} 
CShape* CCore::GetShapeByID(unsigned long nID) 
{ 
	CShape* pShape=NULL; 
	POSITION pos;	 
	pos=m_pDoc->m_shapeList.GetHeadPosition(); 
	while (pos!=NULL) {		 
		pShape=m_pDoc->m_shapeList.GetNext(pos); 
        if(pShape->GetID()==nID){ 
			break; 
        }		 
	}	 
	return pShape; 
} 
void CCore::ReMoveShape(unsigned long nID) 
{ 
	CShape* pShape=NULL; 
	POSITION pos,posPre;	 
	pos=m_pDoc->m_shapeList.GetHeadPosition(); 
	while (pos!=NULL) { 
		posPre=pos; 
		pShape=m_pDoc->m_shapeList.GetNext(pos); 
        if(pShape->GetID()==nID){ 
			m_pDoc->m_shapeList.RemoveAt(posPre); 
			break; 
        }		 
	}		 
}