📄 drawchipview.cpp
字号:
}
}
if (pObject->IsKindOf(RUNTIME_CLASS(CIcChip)))
{
pIcChip = (CIcChip *)pObject;
dlgIcChip.m_strName = pIcChip->GetName();
dlgIcChip.m_ChipNum = pIcChip->GetChipNum();
dlgIcChip.m_Encapsulate = pIcChip->GetEncapsulate ();
dlgIcChip.m_StCurrent = pIcChip->GetStCurrent ();
dlgIcChip.m_StPower = pIcChip->GetStPower();
this->UpdateData(FALSE);
if (dlgIcChip.DoModal() == IDOK)
{
this->UpdateData(TRUE);
pIcChip->SetName(dlgIcChip.m_strName);
pIcChip->SetChipNum(dlgIcChip.m_ChipNum);
pIcChip->SetEncapsulate (dlgIcChip.m_Encapsulate);
pIcChip->SetStCurrent(dlgIcChip.m_StCurrent);
pIcChip->SetStPower (dlgIcChip.m_StPower);
}
else
{
//点按了“取消”按钮,不做任何事情
}
}
if (pObject->IsKindOf(RUNTIME_CLASS(CPaSocket)))
{
pPaSocket = (CPaSocket *)pObject;
dlgMySocket.m_strName = pPaSocket->GetName();
dlgMySocket.m_Current = pPaSocket->GetCurrent();
dlgMySocket.m_Type = pPaSocket->GetType ();
dlgMySocket.m_Pressure = pPaSocket->GetPressure ();
this->UpdateData(FALSE);
if (dlgMySocket.DoModal() == IDOK)
{
this->UpdateData(TRUE);
pPaSocket->SetName(dlgMySocket.m_strName);
pPaSocket->SetCurrent(dlgMySocket.m_Current);
pPaSocket->SetPressure (dlgMySocket.m_Pressure );
pPaSocket->SetType (dlgMySocket.m_Type );
}
else
{
//点按了“取消”按钮,不做任何事情
}
}
if (pObject->IsKindOf(RUNTIME_CLASS(CCrSocket)))
{
pCrSocket = (CCrSocket *)pObject;
dlgMySocket.m_strName = pCrSocket->GetName();
dlgMySocket.m_Current = pCrSocket->GetCurrent();
dlgMySocket.m_Type = pCrSocket->GetType ();
dlgMySocket.m_Pressure = pCrSocket->GetPressure ();
this->UpdateData(FALSE);
if (dlgMySocket.DoModal() == IDOK)
{
this->UpdateData(TRUE);
pCrSocket->SetName(dlgMySocket.m_strName);
pCrSocket->SetCurrent(dlgMySocket.m_Current);
pCrSocket->SetPressure (dlgMySocket.m_Pressure );
pCrSocket->SetType (dlgMySocket.m_Type );
}
else
{
//点按了“取消”按钮,不做任何事情
}
}
if (pObject->IsKindOf(RUNTIME_CLASS(CTransistor)))
{
pTransistor = (CTransistor *)pObject;
dlgTransistor.m_Frequence = pTransistor->GetFrequence();
dlgTransistor.m_Name = pTransistor->GetName();
dlgTransistor.m_Power = pTransistor->GetPower();
dlgTransistor.m_Switch = pTransistor->GetSwitch();
dlgTransistor.m_Type = pTransistor->GetType();
this->UpdateData(FALSE);
if (dlgTransistor.DoModal() == IDOK)
{
this->UpdateData(TRUE);
pTransistor->SetName(dlgTransistor.m_Name);
pTransistor->SetFrequence (dlgTransistor.m_Frequence );
pTransistor->SetPower (dlgTransistor.m_Power );
pTransistor->SetType(dlgTransistor.m_Type );
}
else
{
//点按了“取消”按钮,不做任何事情
}
}
pDoc->SetModifiedFlag(TRUE);
Invalidate();
}
else
{
//此情况从理论上不会出现
ASSERT(FALSE);
}
break;
default://其它
MessageBox("请您选择一个而不是多个元器件!","提示",MB_ICONINFORMATION);
break;
}
}
//##ModelId=3E18E0DD03DF
POSITION CDrawChipView::GetFirstSelPos(CObList *pObList)
{
POSITION pos = pObList->GetHeadPosition();
CObject *pObject;
CComponent *pComponent;
while(pos != NULL)
{
pObject = pObList->GetAt(pos);
pComponent = (CComponent *)pObject;
if (pComponent->GetIsSelected())
{
return pos;
}
else
pObList->GetNext(pos);
}
return NULL;
}
//##ModelId=3C466BA80008
void CDrawChipView::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
CMenu menu;
menu.LoadMenu(IDR_PROPERTY);
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
}
//##ModelId=3C466BA80062
void CDrawChipView::OnChipPopupProperty()
{
// TODO: Add your command handler code here
CDrawChipView::OnChipProperty();
}
//##ModelId=3C466BA800C7
void CDrawChipView::OnUpdateDrawCompacity(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_bCompacity);
}
//##ModelId=3C466BA80117
void CDrawChipView::OnEditColor()
{
// TODO: Add your command handler code here
//对选择的元器件图形颜色进行编辑
CDrawChipDoc *pDoc = GetDocument();
CObList *pObList = &(pDoc->m_ChipObList);
int iBeSelCount = BeSelectedNum(pObList);
CColorDialog dlgColor(RGB(255,0,0),CC_FULLOPEN);
COLORREF colour;
if (iBeSelCount>0)
//有选中的
{
if (dlgColor.DoModal() == IDOK)
{
colour = dlgColor.GetColor();
//更改链表中处于选中状态的元器件
SetBeSelColor(pObList,colour);
Invalidate();
}
else
{
//do nothing
}
}
else
//没有选中的
{
MessageBox("请您首先选择元器件图形!","提示",MB_ICONINFORMATION);
}
}
//##ModelId=3E18E0DD0370
void CDrawChipView::SetBeSelColor(CObList *pObList, COLORREF color)
{
POSITION pos = pObList->GetHeadPosition();
CObject *pObject;
CComponent *pComponent;
while (pos != NULL)
{
pObject = pObList->GetAt(pos);
pComponent = (CComponent *)pObject;
if (pComponent->GetIsSelected())
{
pComponent->SetColor(color);
}
else
{
//do nothing
}
pObList->GetNext(pos);
}
}
//##ModelId=3C466BA80167
void CDrawChipView::OnEditDelete()
{
// TODO: Add your command handler code here
//对删除选择的元器件
CDrawChipDoc *pDoc = GetDocument();
CObList *pObList = &(pDoc->m_ChipObList);
int iBeSelCount = BeSelectedNum(pObList);
if (iBeSelCount>0)
{
if (MessageBox("确实删除吗(Y/N?)","提示",MB_YESNO|MB_ICONQUESTION) == IDYES)
{
DeleteBeSel(pObList);
Invalidate();
}
else
{
//do nothing
}
}
else
{
MessageBox("请您首先选择元器件图形!","提示",MB_ICONINFORMATION);
}
}
//##ModelId=3E18E0DD030C
void CDrawChipView::DeleteBeSel(CObList *pObList)
{
POSITION pos = pObList->GetHeadPosition();
POSITION tmpPos;
CObject *pObject;
CComponent *pComponent;
while ((tmpPos = pos) != NULL)
{
pObject = pObList->GetNext(pos);
pComponent = (CComponent *)pObject;
if (pComponent->GetIsSelected())
{
pObList->RemoveAt(tmpPos);
delete pObject;
}
else
{
//do nothing
}
}
}
//##ModelId=3C466BA801AD
void CDrawChipView::OnEditLine1()
{
// TODO: Add your command handler code here
//改变画笔的宽度
CDrawChipDoc *pDoc = GetDocument();
CObList *pObList = &(pDoc->m_ChipObList);
int iBeSelCount = BeSelectedNum(pObList);
if (iBeSelCount>0)
{
SetBeSelLineWidth(pObList,50);
Invalidate();
}
else
{
MessageBox("请您首先选择元器件图形!","提示",MB_ICONINFORMATION);
}
}
//##ModelId=3E18E0DD029E
void CDrawChipView::SetBeSelLineWidth(CObList *pObList,int LineWidth)
{
POSITION pos = pObList->GetHeadPosition();
CObject *pObject;
CComponent *pComponent;
while (pos != NULL)
{
pObject = pObList->GetAt(pos);
pComponent = (CComponent *)pObject;
if (pComponent->GetIsSelected())
{
pComponent->SetLineWidth(LineWidth);
}
else
{
//do nothing
}
pObList->GetNext(pos);
}
}
//##ModelId=3C466BA801E9
void CDrawChipView::OnEditLine2()
{
// TODO: Add your command handler code here
CDrawChipDoc *pDoc = GetDocument();
CObList *pObList = &(pDoc->m_ChipObList);
int iBeSelCount = BeSelectedNum(pObList);
if (iBeSelCount>0)
{
SetBeSelLineWidth(pObList,80);
Invalidate();
}
else
{
MessageBox("请您首先选择元器件图形!","提示",MB_ICONINFORMATION);
}
}
//##ModelId=3C466BA80225
void CDrawChipView::OnEditLine3()
{
// TODO: Add your command handler code here
CDrawChipDoc *pDoc = GetDocument();
CObList *pObList = &(pDoc->m_ChipObList);
int iBeSelCount = BeSelectedNum(pObList);
if (iBeSelCount>0)
{
SetBeSelLineWidth(pObList,110);
Invalidate();
}
else
{
MessageBox("请您首先选择元器件图形!","提示",MB_ICONINFORMATION);
}
}
//##ModelId=3C466BA80257
void CDrawChipView::OnEditCopy()
//将选中的元器件拷贝到剪贴板
{
// TODO: Add your command handler code here
CClientDC dc(this);
OnPrepareDC(&dc);
CDrawChipDoc *pDoc = GetDocument();
CObList *pObList = &(pDoc->m_ChipObList);
int iBeSelCount = BeSelectedNum(pObList);
CPower *pPower;
CIcChip *pIcChip;
CPaSocket *pPaSocket;
CCrSocket *pCrSocket;
CResistor *pResistor;
CCompacity *pCompacity;
CSwitch *pSwitch;
CDiode *pDiode;
CInductor *pInductor;
CTransistor *pTransistor;
CObject *pObject;
RESISTOR Resistor;
COMPACITY Compacity;
SWITCH Switch;
DIODE Diode;
INDUCTOR Inductor;
POWER Power;
ICCHIP IcChip;
MYSOCKET mySocket;
TRANSISTOR Transistor;
HGLOBAL hMem;
LPVOID lpMem;
POSITION pos;
CRect rectInvalidate;
CString strName;
CSize Textsize;
switch (iBeSelCount)
{
case 1://选中了一个
::OpenClipboard(this->m_hWnd);
::EmptyClipboard();
pos = GetFirstSelPos(pObList);
pObject = pObList->GetAt(pos);
if (pObject->IsKindOf(RUNTIME_CLASS(CResistor)))
{
//申请空间
hMem = ::GlobalAlloc(GHND,sizeof(RESISTOR));
lpMem = ::GlobalLock(hMem);
//将对象的一些属性值给结构
pResistor = (CResistor *)pObject;
pResistor->CopyReToStruRe(Resistor);
//把结构拷贝到申请的空间中
::memcpy(lpMem,&Resistor,sizeof(RESISTOR));
::GlobalUnlock(hMem);
::SetClipboardData(((CDrawChipApp *)AfxGetApp())->m_uClipFmt,hMem);
//把链表中这个对象的IsSelected属性置为false
//此功能是仿照一些RAD开发工具而定,比如VB
//当复制了某个被选中的对象后,此对象将不处于被选中状态
//当粘贴后,把刚粘贴上的对象设为选中状态
strName = pResistor->GetName();
pResistor->SetIsSelected(FALSE);
::GetTextExtentPoint32(dc, (const char *)&strName, strName.GetLength(), &Textsize);
rectInvalidate = pResistor->m_Rect;
}
if (pObject->IsKindOf(RUNTIME_CLASS(CCompacity)))
{
//申请空间
hMem = ::GlobalAlloc(GHND,sizeof(COMPACITY));
lpMem = ::GlobalLock(hMem);
//将对象的一些属性值给结构
pCompacity = (CCompacity *)pObject;
pCompacity->CopyComToStrucCom(Compacity);
//把结构拷贝到申请的空间中
::memcpy(lpMem,&Compacity,sizeof(COMPACITY));
::GlobalUnlock(hMem);
::SetClipboardData(((CDrawChipApp *)AfxGetApp())->m_uClipFmt,lpMem);
strName = pCompacity->GetName();
pCompacity->SetIsSelected(FALSE);
::GetTextExtentPoint32(dc, (const char *)&strName, strName.GetLength(), &Textsize);
rectInvalidate = pCompacity->m_Rect;
}
if (pObject->IsKindOf(RUNTIME_CLASS(CSwitch)))
{
//申请空间
hMem = ::GlobalAlloc(GHND,sizeof(SWITCH));
lpMem = ::GlobalLock(hMem);
//将对象的一些属性值给结构
pSwitch = (CSwitch *)pObject;
pSwitch->CopySwToStrucSw(Switch);
//把结构拷贝到申请的空间中
::memcpy(lpMem,&Switch,sizeof(SWITCH));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -