⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawchipview.cpp

📁 本人买的<<VC++项目开发实例>>源代码配套光盘.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// DrawChipView.cpp : implementation of the CDrawChipView class
//

#include "stdafx.h"
#include "DrawChip.h"

#include "DrawChipDoc.h"
#include "DrawChipView.h"
#include "dlgResistorPro.h"
#include "dlgCompacityPro.h"
#include "dlgSwitchpro.h"
#include "dlgdiodepro.h"
#include "dlginductorpro.h"
#include "dlgPowerPro.h"
#include "dlgIcchippro.h"
#include "dlgSocketPro.h"
#include "dlgTransistor.h"

#include "resistor.h"
#include "compacity.h"
#include "switch.h"
#include "diode.h"
#include "inductor.h"
#include "power.h"
#include "IcChip.h"
#include "mysocket.h"
#include "PaSocket.h"
#include "CrSocket.h"
#include "Transistor.h"
#include "optionsheet.h"
#include "inifile.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDrawChipView

IMPLEMENT_DYNCREATE(CDrawChipView, CScrollView)

BEGIN_MESSAGE_MAP(CDrawChipView, CScrollView)
	//{{AFX_MSG_MAP(CDrawChipView)
	ON_COMMAND(ID_DRAW_RESISTOR, OnDrawResistor)
	ON_COMMAND(ID_DRAW_DIODE, OnDrawDiode)
	ON_COMMAND(ID_DRAW_INDUCTOR, OnDrawInductor)
	ON_COMMAND(ID_DRAW_POWER, OnDrawPower)
	ON_COMMAND(ID_DRAW_TRASISTOR, OnDrawTrasistor)
	ON_COMMAND(ID_DRAW_CHIP, OnDrawChip)
	ON_COMMAND(ID_DRAW_CROSS_SOCKET, OnDrawCrossSocket)
	ON_COMMAND(ID_DRAW_PARALLEL_SOCKET, OnDrawParallelSocket)
	ON_COMMAND(ID_DRAW_SWITCH, OnDrawSwitch)
	ON_COMMAND(ID_DRAW_COMPACITY, OnDrawCompacity)
	ON_WM_MOUSEMOVE()
	ON_UPDATE_COMMAND_UI(ID_DRAW_RESISTOR, OnUpdateDrawResistor)
	ON_UPDATE_COMMAND_UI(ID_DRAW_POWER, OnUpdateDrawPower)
	ON_COMMAND(ID_DRAW_NOTHING, OnDrawNothing)
	ON_UPDATE_COMMAND_UI(ID_DRAW_NOTHING, OnUpdateDrawNothing)
	ON_WM_LBUTTONDOWN()
	ON_UPDATE_COMMAND_UI(ID_DRAW_TRASISTOR, OnUpdateDrawTrasistor)
	ON_COMMAND(ID_CHIP_PROPERTY, OnChipProperty)
	ON_WM_CONTEXTMENU()
	ON_COMMAND(ID_CHIP__POPUP_PROPERTY, OnChipPopupProperty)
	ON_UPDATE_COMMAND_UI(ID_DRAW_COMPACITY, OnUpdateDrawCompacity)
	ON_COMMAND(ID_EDIT_COLOR, OnEditColor)
	ON_COMMAND(ID_EDIT_DELETE, OnEditDelete)
	ON_COMMAND(ID_EDIT_LINE1, OnEditLine1)
	ON_COMMAND(ID_EDIT_LINE2, OnEditLine2)
	ON_COMMAND(ID_EDIT_LINE3, OnEditLine3)
	ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
	ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
	ON_UPDATE_COMMAND_UI(ID_DRAW_SWITCH, OnUpdateDrawSwitch)
	ON_UPDATE_COMMAND_UI(ID_DRAW_DIODE, OnUpdateDrawDiode)
	ON_UPDATE_COMMAND_UI(ID_DRAW_INDUCTOR, OnUpdateDrawInductor)
	ON_WM_KEYUP()
	ON_UPDATE_COMMAND_UI(ID_DRAW_CHIP, OnUpdateDrawChip)
	ON_UPDATE_COMMAND_UI(ID_DRAW_CROSS_SOCKET, OnUpdateDrawCrossSocket)
	ON_UPDATE_COMMAND_UI(ID_DRAW_PARALLEL_SOCKET, OnUpdateDrawParallelSocket)
	ON_WM_KEYDOWN()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_CREATE()
	ON_WM_SETCURSOR()
	ON_WM_CANCELMODE()
	ON_COMMAND(ID_EDIT_BRINGTOFRONT, OnEditBringtofront)
	ON_COMMAND(ID_EDIT_SENDTOBACK, OnEditSendtoback)
	ON_COMMAND(ID_OPTION, OnOption)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDrawChipView construction/destruction

//##ModelId=3C466B9603B0
static const char * GetAppPath()
{
	static char ExeFilePath[MAX_PATH] = {0};

	VERIFY( 0 != GetModuleFileName(NULL, ExeFilePath, sizeof(ExeFilePath)));
	TRACE("DLL(fetchscript): static const char * GetAppPath() = %s\n", ExeFilePath);
	static char drive[_MAX_DRIVE];
	static char dir[_MAX_DIR];
	static char fname[_MAX_FNAME];
	static char ext[_MAX_EXT];
	
	_splitpath(ExeFilePath, drive, dir, fname, ext);
	wsprintf(ExeFilePath, "%s%s", drive, dir);
	return ExeFilePath;
   
}
//##ModelId=3E18E0D50250
CDrawChipView::CDrawChipView() : m_sheetOption("选项")
{
	// TODO: add construction code here
	m_bResistor = FALSE;
	m_bPower = FALSE;
	m_bNothing = FALSE;
	m_bTransistor = FALSE;
	m_bCompacity = FALSE;
	m_bSwitch = FALSE;
	m_bDiode = FALSE;
	m_bInductor = FALSE;
	m_bIcChip = FALSE;
	m_bPaSocket = FALSE;
	m_bCrSocket = FALSE;
	
	CIniFile iniColor;
	CString strIniFileName(CString(GetAppPath()) + "colors.ini");

	iniColor.SetPath(strIniFileName);
	iniColor.ReadFile();
	m_rgbBackColor = iniColor.GetValueI("colors","BackColor");
	m_rgbFillColor  = iniColor.GetValueI("colors","FillColor");
	m_rgbBoardColor  = iniColor.GetValueI("colors","BoardColor");
	if (0 == m_rgbBackColor)
	{
		m_rgbBackColor = RGB(128,128,128);
	}
	if (0 == m_rgbFillColor)
	{
		m_rgbFillColor = RGB(176,176,176);
	}
	if (0 == m_rgbBoardColor)
	{
		m_rgbBoardColor = RGB(167,157,40);
	}


}

//##ModelId=3E18E0E000BE
CDrawChipView::~CDrawChipView()
{	
	CIniFile iniColor;
	CString strIniFileName(CString(GetAppPath()) + "colors.ini");

	iniColor.SetPath(strIniFileName);
	iniColor.ReadFile();
	iniColor.SetValueI("colors","BackColor", m_rgbBackColor);
	iniColor.SetValueI("colors","FillColor", m_rgbFillColor);
	iniColor.SetValueI("colors","BoardColor", m_rgbBoardColor);
	iniColor.WriteFile();

}

//##ModelId=3E18E0D80078
BOOL CDrawChipView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CDrawChipView drawing

//##ModelId=3E18E0D70046
void CDrawChipView::OnDraw(CDC* pDC)
{
	CDrawChipDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	/*绘制画图板*/
//	CPen newpen(PS_DASH,0,RGB(178,178,178));
//	CPen *pOldPen = pDC->SelectObject(&newpen);
	
	//CRect rectBound(1000,-1000,18500,-28500), rectShadow(rectBound);
	/*将绘制区改为横向的*/
	CRect rectBound(1000,-1000,28500,-18500), rectShadow(rectBound);
	//CBitmap bmpBK;
	//bmpBK.LoadBitmap(IDB_BITMAP_BK);
//shadow
	CBrush *oldBrush, bkBrush(m_rgbBoardColor), bkShadowBrush(RGB(192,192,192));//bkBrush(&bmpBK), bkShadowBrush(RGB(192,192,192));
	CPen *pOldPen, penShadow(PS_NULL, 0, RGB(0, 0, 0));

	pOldPen = pDC->SelectObject(&penShadow);

	oldBrush = pDC->SelectObject(&bkShadowBrush);

	rectShadow.OffsetRect(150, -150);
	pDC->Rectangle(rectShadow);
	
	pDC->SelectObject(&bkBrush);

	
	pDC->Rectangle(rectBound);
	pDC->SelectObject(pOldPen);
//	pDC->SelectObject(pOldPen);
	pDC->SelectObject(oldBrush);
	/*绘制链表中的各个元器件*/	
	POSITION pos = pDoc->m_ChipObList.GetHeadPosition();	
	CObject *pObject;
	CResistor *pResistor;
	CCompacity *pCompacity;
	CSwitch *pSwitch;	

	CTransistor *pTransistor;
	CDiode *pDiode;	
	CInductor *pInductor;
	CPower *pPower;
	CIcChip *pIcChip;
	CPaSocket *pPaSocket;
	
	CCrSocket *pCrSocket;
	
	CComponent *pComponent;
	CBrush fillBrush(m_rgbFillColor);
	oldBrush = pDC->SelectObject(&fillBrush);

	while (pos != NULL)
	{
		pObject = pDoc->m_ChipObList.GetAt(pos);
		pComponent = (CComponent *)pObject;		
		if (pObject->IsKindOf(RUNTIME_CLASS(CResistor)))
		{
			pResistor = (CResistor *)pObject;
			pResistor->m_RectTracker.m_rect = pResistor->m_RectLP;		
			pDC->LPtoDP(pResistor->m_RectTracker.m_rect);
			if (pResistor->GetIsSelected())
			{
				pResistor->m_RectTracker.Draw(pDC);
			}	
			//pResistor->Draw(pDC);
		}
		if (pObject->IsKindOf(RUNTIME_CLASS(CCompacity)))
		{
			pCompacity = (CCompacity *)pObject;
			pCompacity->m_RectTracker.m_rect = pCompacity->m_RectLP;		
			pDC->LPtoDP(pCompacity->m_RectTracker.m_rect);
			if (pCompacity->GetIsSelected())
			{
				pCompacity->m_RectTracker.Draw(pDC);
			}	
			//pCompacity->Draw(pDC);
		}
		if (pObject->IsKindOf(RUNTIME_CLASS(CSwitch)))
		{
			pSwitch = (CSwitch *)pObject;
			pSwitch->m_RectTracker.m_rect = pSwitch->m_RectLP;		
			pDC->LPtoDP(pSwitch->m_RectTracker.m_rect);
			if (pSwitch->GetIsSelected())
			{
				pSwitch->m_RectTracker.Draw(pDC);
			}	
			//pSwitch->Draw(pDC);
		}
		if (pObject->IsKindOf(RUNTIME_CLASS(CDiode)))
		{
			pDiode = (CDiode *)pObject;
			pDiode->m_RectTracker.m_rect = pDiode->m_RectLP;		
			pDC->LPtoDP(pDiode->m_RectTracker.m_rect);
			if (pDiode->GetIsSelected())
			{
				pDiode->m_RectTracker.Draw(pDC);
			}	
			//pDiode->Draw(pDC);
		}
		if (pObject->IsKindOf(RUNTIME_CLASS(CInductor)))
		{
			pInductor = (CInductor *)pObject;
			pInductor->m_RectTracker.m_rect = pInductor->m_RectLP;
			pDC->LPtoDP(pInductor->m_RectTracker.m_rect);
			if (pInductor->GetIsSelected())
			{
				pInductor->m_RectTracker.Draw(pDC);
			}	
			//pInductor->Draw(pDC);
		}
		if (pObject->IsKindOf(RUNTIME_CLASS(CPower)))
		{
			pPower = (CPower *)pObject;
			pPower->m_RectTracker.m_rect = pPower->m_RectLP;
			pDC->LPtoDP(pPower->m_RectTracker.m_rect);
			if (pPower->GetIsSelected())
			{
				pPower->m_RectTracker.Draw(pDC);
			}	
			//pPower->Draw(pDC);
		}
		if (pObject->IsKindOf(RUNTIME_CLASS(CIcChip)))
		{
			pIcChip = (CIcChip *)pObject;
			pIcChip->m_RectTracker.m_rect = pIcChip->m_RectLP;
			pDC->LPtoDP(pIcChip->m_RectTracker.m_rect);
			if (pIcChip->GetIsSelected())
			{
				pIcChip->m_RectTracker.Draw(pDC);
			}	
			//pIcChip->Draw(pDC);
		}
		if (pObject->IsKindOf(RUNTIME_CLASS(CPaSocket)))
		{
			pPaSocket = (CPaSocket *)pObject;
			pPaSocket->m_RectTracker.m_rect = pPaSocket->m_RectLP;
			pDC->LPtoDP(pPaSocket->m_RectTracker.m_rect);
			if (pPaSocket->GetIsSelected())
			{
				pPaSocket->m_RectTracker.Draw(pDC);
			}				
			//pPaSocket->Draw(pDC);
		}

		if (pObject->IsKindOf(RUNTIME_CLASS(CCrSocket)))
		{
			pCrSocket = (CCrSocket *)pObject;
			pCrSocket->m_RectTracker.m_rect = pCrSocket->m_RectLP;
			pDC->LPtoDP(pCrSocket->m_RectTracker.m_rect);
			if (pCrSocket->GetIsSelected())
			{
				pCrSocket->m_RectTracker.Draw(pDC);
			}				
			//pCrSocket->Draw(pDC);
		}

		if (pObject->IsKindOf(RUNTIME_CLASS(CTransistor)))
		{
			pTransistor = (CTransistor *)pObject;
			pTransistor->m_RectTracker.m_rect = pTransistor->m_RectLP;
			pDC->LPtoDP(pTransistor->m_RectTracker.m_rect);
			if (pTransistor->GetIsSelected())
			{
				pTransistor->m_RectTracker.Draw(pDC);
			}				
			//pTransistor->Draw(pDC);
		}
		pComponent->Draw(pDC);

		pDoc->m_ChipObList.GetNext(pos);
	}
	pDC->SelectObject(oldBrush);
}

//##ModelId=3E18E0D90334
void CDrawChipView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();
	
	// TODO: calculate the total size of this view
	//CSize sizeTotal(50000,30000);//这里的值是逻辑坐标,20cm,30cm
	CSize sizeTotal(30000,30000);//这里的值是逻辑坐标,20cm,30cm
	CSize sizePage(sizeTotal.cx/5,sizeTotal.cy/6);
	CSize sizeLine(sizeTotal.cx/50,sizeTotal.cy/50);
	//MM_HIMETRIC映射模式的y轴方向是向下减的
	SetScrollSizes(MM_HIMETRIC,sizeTotal,sizePage,sizeLine);			
	
}

/////////////////////////////////////////////////////////////////////////////
// CDrawChipView printing

//##ModelId=3E18E0DA02EE
BOOL CDrawChipView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

//##ModelId=3E18E0DB0276
void CDrawChipView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

//##ModelId=3E18E0DC01FE
void CDrawChipView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CDrawChipView diagnostics

#ifdef _DEBUG
//##ModelId=3E18E0E100F0
void CDrawChipView::AssertValid() const
{
	CScrollView::AssertValid();
}

//##ModelId=3E18E0E200AA
void CDrawChipView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

//##ModelId=3E18E0D6008C
CDrawChipDoc* CDrawChipView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawChipDoc)));
	return (CDrawChipDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDrawChipView message handlers

//##ModelId=3E18E0DF0136
BOOL CDrawChipView::IsInChipRect(CPoint point, CObList *pObList, POSITION *pCurPos, BOOL *pIsSel)
//此函数得到鼠标是否点按在元器件上
//同时利用参数CurPos记录搜索链表时停止的位置,利用参数IsSel记录当前位置上对象的IsSelected属性
//不过,以上返回值只有在鼠标点按在了元器件上时才有使用价值
{
	*pCurPos = NULL;
	*pIsSel = FALSE;	
	POSITION pos = pObList->GetTailPosition();
	int ht = CRectTracker::hitNothing;
	CObject *pObject;
	CResistor *pResistor;
	CCompacity *pCompacity;
	CSwitch *pSwitch;
	CDiode *pDiode;
	CInductor *pInductor;
	CPower *pPower;
	CIcChip *pIcChip;
	CPaSocket *pPaSocket;
	CCrSocket *pCrSocket;
	CTransistor *pTransistor;

	while(pos!=NULL)
	{
		*pCurPos = pos;
		pObject = pObList->GetAt(pos);
		if (pObject->IsKindOf(RUNTIME_CLASS(CResistor)))
		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -