www.gusucode.com > VC++开发的电路板画图设计软件源代码源码程序 > VC++开发的电路板画图设计软件源代码源码程序\code\SelectTool.cpp
//Download by http://www.NewXing.com // SelectTool.cpp: implementation of the CSelectTool class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "Pointtest.h" #include "SelectTool.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CSelectTool::CSelectTool(CWnd* cWnd,CElist* pList,CPointList* pOintList,CLineList* pLineList,CTextList* pText) :CBaseTool(cWnd,pList,pOintList,pLineList,pText) { SelectedPoint = NULL; SelectedPoint1 = NULL; PointSelect = FALSE; ObSelect = FALSE; ControlKey = FALSE; ArrowSelect = FALSE; for(int i=0;i<3;i++) cell[i] = ""; } CSelectTool::~CSelectTool() { } void CSelectTool::OnLButtonDown(UINT nFlags, CPoint point) { CanDraw = TRUE; CaptureScr(); CDC* pDC = m_pWnd->GetDC(); ControlKey = (MK_CONTROL & nFlags); ObSelect = m_pList->PtInGraph(point,ControlKey); TextSelect = m_pTextList->PtInGraph(point,ControlKey); ArrowSelect = m_pList->PtInArrow(point); if(ArrowSelect){ }else if(ObSelect||TextSelect){//select element if(SelectedPoint) SelectedPoint = NULL; Draw(); }else if(PointSelect){//select point if(SelectedPoint){ Draw(); pDC->MoveTo(SelectedPoint->CenterPoint); pDC->LineTo(point); } }else{ ObSelect = m_pLineList->PtInGraph(point,ControlKey); if(ObSelect){ Draw(); } } BeginPoint = point;//passed //Draw(); m_pWnd->ReleaseDC(pDC); } void CSelectTool::OnLButtonUp(UINT nFlags, CPoint point) { if(!CanDraw) return; CanDraw = FALSE; if(ObSelect||TextSelect){ if(SelectedPoint) SelectedPoint = NULL; // EndPoint = point; // m_pList->MoveSelected(EndPoint-BeginPoint); // m_pTextList->MoveSelected(EndPoint-BeginPoint); // BeginPoint = EndPoint; m_pTextList->ReSetMoveFlag(); Draw(); }else if(PointSelect){ if(SelectedPoint){ SelectedPoint1 = m_PointList->PtInGraph(point); if((SelectedPoint1!=SelectedPoint)&&SelectedPoint1){ m_pLine = new CLine(SelectedPoint,SelectedPoint1,m_pLineList); SelectedPoint->AddSon(m_pLine); SelectedPoint1->AddSon(m_pLine); } SelectedPoint = NULL; SelectedPoint1 = NULL; } }else{ EndPoint = point; m_pList->ObInRegion(GetRect(BeginPoint,EndPoint)); } ReleaseScr(); Draw(); } void CSelectTool::OnMouseMove(UINT nFlags, CPoint point) { if(!CanDraw){ m_PointList->DeSelect(); SelectedPoint = m_PointList->PtInGraph( point ); if(!SelectedPoint) PointSelect = FALSE; Draw(); } if(CanDraw){ if(ArrowSelect){ EndPoint = point; m_pList->MovePoint(point,EndPoint-BeginPoint); BeginPoint = EndPoint; Draw(); }else if(ObSelect||TextSelect){ if(SelectedPoint) SelectedPoint = NULL; EndPoint = point; m_pList->MoveSelected(EndPoint-BeginPoint); m_pTextList->MoveSelected(EndPoint-BeginPoint); BeginPoint = EndPoint; Draw(); }else if(PointSelect){ if(SelectedPoint){ SelectedPoint1 = m_PointList->PtInGraph(point); Draw(); CDC* pDC = m_pWnd->GetDC(); pDC->MoveTo(SelectedPoint->CenterPoint); pDC->LineTo(point); m_pWnd->ReleaseDC(pDC); } }else{ EndPoint = point;//passed Draw(BeginPoint,EndPoint); } }else if(SelectedPoint){ PointSelect = TRUE; } } void CSelectTool::OnLButtonDblClk(UINT nFlags, CPoint point) { CBase* aa; UINT nId; aa = m_pList->PtDbInGraph(point); if(aa){ if(GetCellString(aa)){ CPropertiy dlg(cell[0]); dlg.m_value = aa->Value; dlg.m_properte = cell[1]; dlg.m_unit = cell[2]; dlg.m_remark = aa->Content_Of_Ob; nId = aa->GetType(); if(nId==ID_RHEOSTAT||nId==ID_VOLTAGE_METER||nId==ID_CURRENT_METER){ dlg.m_MaxValue = aa->MaxValue; } if(IDOK == dlg.DoModal()){ aa->Value = dlg.m_value; aa->Content_Of_Ob = dlg.m_remark; if(nId==ID_RHEOSTAT||nId==ID_VOLTAGE_METER||nId==ID_CURRENT_METER){ aa->MaxValue = dlg.m_MaxValue; aa->SetEValue(); } } } } } BOOL CSelectTool::GetCellString(CBase* aa) { switch(aa->GetType()){ case ID_RESISTANCE: cell[0] = "电阻属性"; cell[1] = "电阻阻值"; cell[2] = "欧姆"; break; case ID_RHEOSTAT: cell[0] = "变阻器属性"; cell[1] = "变阻器阻值"; cell[2] = "欧姆"; break; case ID_CAPACITANCE: cell[0] = "电容属性"; cell[1] = "电容值"; cell[2] = "微法"; break; case ID_DIODE: cell[0] = "二极管属性"; cell[1] = "二极管正向阻值"; cell[2] = "欧姆"; break; case ID_GROUND: cell[0] = "接地属性"; cell[1] = "接地内阻值"; cell[2] = "欧姆"; break; case ID_INDUCTANCE: cell[0] = "电感属性"; cell[1] = "电感值"; cell[2] = "亨"; break; case ID_VOLTAGE_METER: cell[0] = "电压表属性"; cell[1] = "电压表内阻值"; cell[2] = "欧姆"; break; case ID_CURRENT_METER: cell[0] = "电流表属性"; cell[1] = "电流表内阻值"; cell[2] = "欧姆"; break; case ID_SWITCH: cell[0] = "开关属性"; cell[1] = "开关内阻值"; cell[2] = "欧姆"; break; case ID_POWER: cell[0] = "电源属性"; cell[1] = "电源电压值"; cell[2] = "伏特"; break; case ID_LIGHT: cell[0] = "电灯属性"; cell[1] = "电灯阻值"; cell[2] = "欧姆"; break; default: return FALSE; } return TRUE; }