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

📄 pointtestview.cpp

📁 利用VisualC++写的一个比较大的画电路土软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
}
//开始检测并模拟
void CPointtestView::OnGogo()
{
	CString print,dataA;
	CDC* pDC = GetDC();
	m_pNodeList->CreateBaseChain();
	m_pNodeList->AddElementToSerial();
	if(!CheckIFCorrect()){
		m_pNodeList->ClearAll();
		return;
	}
	print = m_pNodeList->GetListString();
	m_pNodeList->OutPut(pDC);
	m_pNodeList->ClearAll();
	pDC->TextOut(10,10,print);
	ReleaseDC(pDC);
}
//看表
void CPointtestView::OnLookmeter() 
{
	m_pList->DisplayWatch(this);
}
//选择工具
void CPointtestView::ToolBox(UINT nID)
{
	//if( Operation_id == (int)nID )	return;
	Operation_id = (int)nID;
	if( m_pBaseTool )
		delete m_pBaseTool;

	Operation_id = nID;

	m_pList->DeSelect();
	m_ppointlist->DeSelect();
	m_pLineList->DeSelect();

	//选择操作工具
	switch( Operation_id )
	{
	case ID_SELECT:
		m_pBaseTool = new CSelectTool( this, m_pList ,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_RESISTANCE:
		m_pBaseTool = new CRTool( this, m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_DOT:
		m_pBaseTool = new CDotTool( this, m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_CAPACITANCE:
		m_pBaseTool = new CCapTool( this, m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_DIODE:
		m_pBaseTool = new CDiodeTool( this, m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_GROUND:
		m_pBaseTool = new CGroundTool( this, m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_INDUCTANCE:
		m_pBaseTool = new CIndTool( this, m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_VOLTAGE_METER:
		m_pBaseTool = new CVoltageTool( this, m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_CURRENT_METER:
		m_pBaseTool = new CCurrentTool( this, m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_SWITCH:
		m_pBaseTool = new CSwitchTool( this, m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_POWER:
		m_pBaseTool = new CPowerTool( this, m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_LIGHT:
		m_pBaseTool = new CLightTool( this, m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_TEXT:
		m_pBaseTool = new CTextTool( this, m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	case ID_RHEOSTAT:
		m_pBaseTool = new CRheostatTool( this ,m_pList,m_ppointlist,m_pLineList,m_pTextList);
		break;
	default:
		m_pBaseTool = NULL;
		AfxMessageBox( _T("没有此工具,请重新选择") );
		return;		
	}
}

void CPointtestView::OnInitialUpdate()
{
	CView::OnInitialUpdate();
	AfxGetMainWnd()->SetWindowText(_T("电路画板"));
	width = ::GetSystemMetrics(SM_CXSCREEN);
	height = ::GetSystemMetrics(SM_CYSCREEN);
	CreateBlankBitmap();
	m_pList = &(GetDocument()->m_list);
	m_ppointlist = &(GetDocument()->m_pointlist);
	m_pLineList = &(GetDocument()->m_linelist);
	m_pTextList = &(GetDocument()->m_textlist);
	m_pNodeList = new CNodeList(m_pList,m_ppointlist,m_pLineList);
	OnSelect();
}
//创建空白页
void CPointtestView::CreateBlankBitmap()
{
	//CBitmap bcc;
	CDC* pDC = GetDC();
	CDC* MemDC = new CDC;
	blank.CreateCompatibleBitmap(pDC,width,height);
	MemDC->CreateCompatibleDC(pDC);
	CBitmap* oldbmp = MemDC->SelectObject(&blank);
	MemDC->PatBlt(0,0,width,height,WHITENESS);
	MemDC->SelectObject(oldbmp);
	delete MemDC;
	ReleaseDC(pDC);
}
void CPointtestView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	switch(nChar){
	case VK_DELETE:
		m_pList->DeleteSelected();
		m_pLineList->DeleteSelected();
		m_pTextList->DeleteSelected();
		break;
	case 'A'://VK_CONTROL:
		if(::GetKeyState(VK_CONTROL)){//&0x8000)
			m_pList->SelectAll();
			m_pTextList->SelectAll();
		}
		break;
	case VK_LEFT:
		m_pList->MoveSelected(CSize(-1,0));
		m_pTextList->Move(CSize(-1,0));
		break;
	case VK_RIGHT:
		m_pList->MoveSelected(CSize(1,0));
		m_pTextList->Move(CSize(1,0));
		break;
	case VK_UP:
		m_pList->MoveSelected(CSize(0,-1));
		m_pTextList->Move(CSize(0,-1));
		break;
	case VK_DOWN:
		m_pList->MoveSelected(CSize(0,1));
		m_pTextList->Move(CSize(0,1));
		break;
	case VK_NEXT:
		m_pList->RotateSelected(-45);
		break;
	case VK_PRIOR:
		m_pList->RotateSelected(45);
		break;
	case VK_SPACE:
		m_pList->TurnSwitch();
		break;
	default:
		break;
	}
	if(m_pBaseTool)
		m_pBaseTool->Draw();
	CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
//字体
void CPointtestView::DrawCompanySign(CDC * pp, int xx, int yy)
{
	LOGFONT logFont;
    logFont.lfHeight = 130;
    logFont.lfWidth = 40;
    logFont.lfEscapement = 300;
    logFont.lfOrientation = 0;
    logFont.lfWeight = FW_NORMAL;
    logFont.lfItalic = 0;
    logFont.lfUnderline = 0;
    logFont.lfStrikeOut = 0;
    logFont.lfCharSet = ANSI_CHARSET;
    logFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
    logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
    logFont.lfQuality = PROOF_QUALITY;
    logFont.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN;
	strcpy(logFont.lfFaceName, "仿宋_GB2312");
	pp->SetBkMode(TRANSPARENT);
	pp->SetTextColor(RGB(249,249,249));

	CFont font;
	font.CreateFontIndirect(&logFont);
	CFont* oldFont = pp->SelectObject(&font);
	CString company = "";
	pp->TextOut(0,0,company);
	pp->TextOut(0,130,company);
	pp->TextOut(0,260,company);
	pp->TextOut(0,390,company);
	pp->SelectObject(oldFont);
	pp->SetTextColor(RGB(0,0,0));
}
//打印功能
void CPointtestView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
	CView::OnPrepareDC(pDC, pInfo);
	//pDC->SetMapMode(MM_TWIPS);
	pDC->SetMapMode(MM_ANISOTROPIC);//转换坐标映射方式	
	CSize size = CSize(800, 560);
	pDC->SetWindowExt(size);//确定窗口大小//得到实际设备每逻辑英寸的象素数量
	int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX);
	int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);//得到设备坐标和逻辑坐标的比例
	long xExt = (long)size.cx * xLogPixPerInch/96;
	long yExt = (long)size.cy * yLogPixPerInch/96;
	pDC->SetViewportExt((int)xExt, (int)yExt);
}

void CPointtestView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	if( m_pBaseTool )
		m_pBaseTool->OnLButtonDblClk( nFlags, point );
	
	CView::OnLButtonDblClk(nFlags, point);
}
//检查电路正确性
BOOL CPointtestView::CheckIFCorrect()
{ 
	if(!m_pNodeList->IfAllPortHaveLine()){//检查是否所有元件都连线
		MessageBox("请检查是否所有元件都连接了导线!","电路画板提示",MB_ICONQUESTION|MB_OK);
		return FALSE;
	}
	//if(!m_//检查电源的连接情况
	if(!m_pNodeList->IfCellClosed()){//检查元件短路的情况
		MessageBox("请检查是否有元件短路情况!","电路画板提示",MB_ICONQUESTION|MB_OK);
		return FALSE;
	}
	if(!m_pNodeList->IfHavePower()){//检查回路中是否有电源
		MessageBox("请检查回路中是否有电源!","电路画板提示",MB_ICONQUESTION|MB_OK);
		return FALSE;
	}
	if(!m_pNodeList->IfCurrentParallel()){//检查两个电流表是否并联
		MessageBox("请检查电路中是否有电流表并联!","电路画板提示",MB_ICONQUESTION|MB_OK);
		return FALSE;
	}
	if(!m_pNodeList->IfVoltageSeries()){//检查电压表是否串联
		MessageBox("请检查电路中是否有电压表串联!","电路画板提示",MB_ICONQUESTION|MB_OK);
		return FALSE;
	}
	//if(!m_pNodeList->IsClose())//检查电路是否闭合
	//MessageBox("请检查电路是否闭和!","电路画板提示",MB_ICONQUESTION|MB_OK);
	//	return FALSE;
	return TRUE;
}

void CPointtestView::OnUpdateDian(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_DIAN?1:0);
}

void CPointtestView::OnUpdateDi(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_DI?1:0);
}

void CPointtestView::OnUpdateDeng(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_DENG?1:0);
}

void CPointtestView::OnUpdateDddz(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_DDDZ?1:0);
}

void CPointtestView::OnUpdateCap(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_CAP?1:0);
}

void CPointtestView::OnUpdateDianzu(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_DIANZU?1:0);
}

void CPointtestView::OnUpdateDianyuan(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_DIANYUAN?1:0);
}

void CPointtestView::OnUpdateDianyabiao(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_DIANYABIAO?1:0);
}

void CPointtestView::OnUpdateDianliubiao(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_DIANLIUBIAO?1:0);
}

void CPointtestView::OnUpdateDiangan(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_DIANGAN?1:0);
}

void CPointtestView::OnUpdateErjiguan(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_ERJIGUAN?1:0);
}

void CPointtestView::OnUpdateSelectone(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_SELECTONE?1:0);
}

void CPointtestView::OnUpdateTexta(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_TEXTA?1:0);
}
void CPointtestView::OnUpdateKetiaodianzu(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(id_Check == ID_KETIAODIANZU?1:0);
	
}
void CPointtestView::Close()
{
	if( m_pBaseTool )
	{
		delete m_pBaseTool;
		m_pBaseTool = NULL;
	}
	if( m_pNodeList ){
		delete m_pNodeList;
		m_pNodeList = NULL;
	}		
}

⌨️ 快捷键说明

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