1、电子元器件系统电子元器件系统代码分析一、 类的定义与实现1、 器件类 器件类定义class CComponent : public CObjectpublic: static COLORREF m_fillColor;/由类的所有对象共享 BOOL IsNum(CString str); BOOL IsInList(int i,CObList *pNumList); DECLARE_SERIAL(CComponent) void Serialize(CArchive& ar); void SetName(const CString &Name); CString GetName(); virt
2、ual void Draw(CDC *pDC); virtual CString CalculateName(CObList *pList); float GetRotateAngle(); void SetRotateAngle(float angle); BOOL GetIsSelected(); void SetIsSelected(BOOL IsSel); int GetLineWidth(); void SetLineWidth(int LWidth); void SetColor(COLORREF color); COLORREF GetColor(); CComponent();
3、 virtual CComponent();private: float m_RotateAngle; BOOL m_IsSelected; int m_iLineWidth; COLORREF m_Color; CString m_strName; 器件类实现COLORREF CComponent:m_fillColor = RGB(176,176,176);/在文件范围内初始化CComponent:CComponent() m_RotateAngle = 0; m_IsSelected = FALSE; /m_iLineWidth = 4; m_iLineWidth = 40; m_Col
4、or = RGB(0,0,255);CComponent:CComponent()COLORREF CComponent:GetColor() return m_Color;void CComponent:SetColor(COLORREF color) m_Color = color;void CComponent:SetLineWidth(int LWidth) m_iLineWidth = LWidth;int CComponent:GetLineWidth() return m_iLineWidth;void CComponent:SetIsSelected(BOOL IsSel) m
5、_IsSelected = IsSel;BOOL CComponent:GetIsSelected() return m_IsSelected;void CComponent:SetRotateAngle(float angle) m_RotateAngle = angle;float CComponent:GetRotateAngle() return m_RotateAngle;CString CComponent:CalculateName(CObList *pObList) return 器件;void CComponent:Draw(CDC *pDC)CString CCompone
6、nt:GetName() return m_strName; void CComponent:SetName(const CString &Name) m_strName = Name;void CComponent:Serialize(CArchive &ar) if (ar.IsStoring() arm_Colorm_iLineWidthm_strNamem_Colorm_iLineWidthm_strNamem_RotateAngle; BOOL CComponent:IsInList(int i, CObList *pNumList)/判断数字i是否在链表pNumList中 POSI
7、TION pos = pNumList-GetHeadPosition(); CObject *pObject; int *p; while(pos != NULL) pObject = pNumList-GetAt(pos); p = (int *)pObject; if (i = (*p) return TRUE; pNumList-GetNext(pos); return FALSE;BOOL CComponent:IsNum(CString str)/判断一个字符串是否是数字,在各个派生类的CalculateName函数中/使用,系统提供的函数atoi()将类似于12ert之类的串转换
8、为12,/这显然是不正确的,因此自己开发了这个小函数 int len = str.GetLength(); char ch; for (int i = 1; i= len; i+) ch = str.GetAt(i-1); if (!(ch=0) return FALSE; return TRUE;2、 电阻类的定义与实现 电阻类的定义#include Component.h/包含基类的头文件typedef struct struc_Resistor char m_strClassType20; /COLORREF m_color; /int m_iLineWidth; BOOL m_IsSe
9、lected; /float m_RotateAngle; char m_strName100; /char m_ReType100;/电阻的类型 /char m_ReValue100;/电阻的阻值RESISTOR;class CResistor : public CComponent public: void CopyReToStruRe(RESISTOR &Resistor); /将电阻对象拷贝到电阻结构中 CResistor(RESISTOR Resistor); void GetNumInNameSer(CObList *pObList,CObList *pNumSer,int *pM
10、ax); /取得已绘制的电阻名称中的数字序列 CResistor(CPoint *pt); DECLARE_SERIAL(CResistor) void Serialize(CArchive& ar); void PrepareDrawChipDC(CDC *pDC); void Draw(CDC *pDC); CString CalculateName(CObList *pObList); void SetReValue(CString &ReValue); void SetReType(CString &ReType); CString GetReValue(); CString GetR
11、eType(); CRect m_Rect; CRect m_RectLP; CRectTracker m_RectTracker; CResistor(); virtual CResistor();private: CString m_ReType; CString m_ReValue; 电阻类的实现CResistor:CResistor() /m_Rect = CRect(0,0,100,60); m_Rect = CRect(0,0,2000,-1000); m_RectLP = m_Rect; m_RectTracker.m_rect = m_Rect; m_RectTracker.m
12、_nStyle = CRectTracker:resizeOutside; SetName(R);CResistor:CResistor()CString CResistor:GetReType() return m_ReType;CString CResistor:GetReValue() return m_ReValue;void CResistor:SetReType(CString &ReType) m_ReType = ReType;void CResistor:SetReValue(CString &ReValue) m_ReValue = ReValue;CString CRes
13、istor:CalculateName(CObList *pObList)/在绘制时系统给出的默认名称,这个名称是根据当前链表中/对象情况而定的,具体功能同VB等开发工具中拖拉控件时产生/名称的情况 CObList *pNumSer = new CObList; int max; char buf10; GetNumInNameSer(pObList,pNumSer,&max); /分析数字序列 for (int i=1;iCount() = %dn, pNumSer-GetCount(); while (pNumSer-GetHeadPosition() delete (int *)pNumSer-RemoveHead(); delete pNumSer; return R+ CString(buf);void CResistor:Draw(CDC *pDC) /*根据元器件对象的颜色和线宽属性值绘制*/ CString name = this-GetName(); int width = m_Rect.Width(); int height = m_Rect.Height();/返回的是负值; CPen
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1