📄 drawchipview.cpp
字号:
// 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 + -