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

📄 drawchipview.cpp

📁 本人买的<<VC++项目开发实例>>源代码配套光盘.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				}
			}
			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 + -