📄 pointtestview.cpp
字号:
}
}
//开始检测并模拟
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 + -