drawdoc.h

来自「VC做的矢量画图程序!」· C头文件 代码 · 共 675 行 · 第 1/2 页

H
675
字号
public:
	float m_StartX;				//文本起点横坐标
	float m_StartY;				//起点纵坐标
	float m_Angle1;				//标注角度
	float m_Angle2;				//字体旋转角度
	float m_TextHeight;			//字体高度
	float m_TextWide;			//字体宽度
	float m_OffWide;			//间隔宽度
	unsigned char m_TextFont;	//字体
	CString c_Text;				//标注的文本信息
	int m_TextLong;				//标注信息的长度
	CText()		//不带任何参数的构造函数
	{
		m_Lb=5;
	}
	CText(short ColorPen,short ColorBrush,short LineWide
		,short LineType,short Layer,int id_only,BOOL Delete,float StartX,
		float StartY,float Angle1,float Angle2,float TextHeight,float TextWide,
		float OffWide,unsigned char TextFont,CString Text)
		:CDraw(ColorPen,ColorBrush,LineWide,LineType,Layer,id_only,Delete,5)
	{
		m_StartX=StartX;
		m_StartY=StartY;
		m_Angle1=Angle1;
		m_Angle2=Angle2;
		m_TextHeight=TextHeight;
		m_TextWide=TextWide;
		m_OffWide=OffWide;
		m_TextLong=Text.GetLength();	//计算字符的长度
		c_Text=Text;
	}
	virtual void Draw(CDC *pDC,int m_DrawMode,int m_DrawMode1,short BackColor);
	virtual void Draw1(CDC *pDC,float x_Insert,float y_Insert,float x_Base,float y_Base,float x_Scale,float y_Scale,int m_DrawMode,int m_DrawMode1,short BackColor);	
	virtual void GetRect(float *minX,float *minY,float *maxX,float *maxY);
	virtual BOOL IsPoint(float x,float y,float jl,float blc);
//	virtual BOOL IsWindowSelect(short lb,float minX,float minY,float maxX,float maxY,float blc);//lb=1;窗口内lb=2相交;lb=3;窗口内或相交
	virtual BOOL IsCircleSelect(short lb,float minX,float minY,float maxX,float maxY,float blc);//lb=1;圆内lb=2相交;lb=3;圆内或相交
	virtual BOOL IsRgnSelect(short lb,float minX,float minY,float maxX,float maxY,BOOL IsWindow);//lb=1;多边形区域内lb=2相交;lb=3;多边形区域内或相交
	virtual void Save(CFile* file,BOOL Yn);
	virtual void Serialize(CArchive& ar);
	virtual void Move(float x_Move,float y_Move);
	virtual void Scale(float x_Base,float y_Base,float x_scale,float y_scale);
	void Init(short ColorPen,short ColorBrush,short LineWide,short LineType,short Layer,float StartX,float StartY,float Angle1,float Angle2,float TextHeight,float TextWide,float OffWide,unsigned char TextFont,CString Text);
	virtual void toChar(char *p_Char);
	virtual char *toData(char *p_Char);
	virtual BOOL dxfRead(CStdioFile* pFile);
	virtual void dxfWrite(CStdioFile* pFile);
	int GetLong();
	void GetRangePline(int* Numb,PointStruct* Pointxy);
};

class CTag: public CDraw		//管理图形元素图例的类
{
public:
	CTag()
	{
		m_Lb=6;
	};
	CTag(short ColorPen,short ColorBrush,short LineWide,short LineType,
		short Layer,BOOL Delete,float xInsert,float yInsert,float xScale,
		float yScale,int only_id,CBlock *pBlock);
	~CTag(){};
	int idBlock;	//块的ID号
	float x_Insert;	//插入点
	float y_Insert;	//插入点纵坐标
	float x_Scale;	//横向比例
	float y_Scale;	//纵向比例
	CBlock* p_Block;	//指向图形块的指针
protected:
	DECLARE_SERIAL(CTag);
public:
	virtual void Draw(CDC* pDC,int DrawMode,int DrawMode1,short BackColor);
	virtual void GetRect(float *minX,float *minY,float *maxX,float *maxY);
//	virtual BOOL IsWindowSelect(short lb,float minX,float minY,float maxX,float maxY,float blc);//lb=1;窗口内lb=2相交;lb=3;窗口内或相交
	virtual BOOL IsCircleSelect(short lb,float minX,float minY,float maxX,float maxY,float blc);//lb=1;圆内lb=2相交;lb=3;圆内或相交
	virtual BOOL IsRgnSelect(short lb,float minX,float minY,float maxX,float maxY,BOOL IsWindow);//lb=1;多边形区域内lb=2相交;lb=3;多边形区域内或相交
	virtual void Serialize(CArchive& ar);
	virtual BOOL IsPoint(float x,float y,float jl,float blc);
	virtual void Move(float x_Move,float y_Move);
	void SetBlock(CBlock* pBlock);
	void AddBlock(CBlock* pBlock);	//将图例内的内容增加到图形块中
};

class CFormrgn : public CDraw		//表格域类,用来管理电子表格中的一个表格域
{
public:
	CFormrgn()
	{
		m_ColorText=1;
		m_Lb=7;
		m_TextHeight=10;
	};
	CFormrgn(short ColorPen,short ColorBrush,
		short LineWide,short LineType,short Layer,int id_only,
		BOOL Delete,float X1,float Y1,float X2,float Y2)
		:CDraw(ColorPen,ColorBrush,LineWide,LineType,Layer,id_only,Delete,7)
	{
		m_ColorText=1;
		m_Lb=7;
		m_TextHeight=10;
		m_X1=X1;
		m_Y1=Y1;
		m_X2=X2;
		m_Y2=Y2;
	}
	~CFormrgn(){};
protected:
	DECLARE_SERIAL(CFormrgn);
	float m_X1,m_Y1,m_X2,m_Y2;	//表格域的矩形边界坐标
public:
	BOOL m_bType;				//表格域显示的内容类型:0-提示信息 1-记录集合对象字段
	BOOL m_bDrawrange;			//是否绘制边界1-绘制 0-不绘制
	BOOL m_bDrawback;			//是否绘制底色
	unsigned char m_ColorText;	//字体显示颜色
	unsigned char m_HDrawtype;	//横向绘制方式0-左对齐1-居中2-右对齐
	unsigned char m_VDrawtype;	//纵向绘制方式0-左对齐1-居中2-右对齐
	float m_TextHeight;			//字体高度
	CString m_str;				//当内容类型为提示信息时,为提示信息的内容
								//当内容类型为记录集合字段时,为字段名称

public:
	virtual void Draw(CDC *pDC,int m_DrawMode,int m_DrawMode1,short BackColor);
	int Draw1(CDC *pDC,short DisplayType,CString m_strDisplay,CRect* rr,BOOL bPlayWave,short *PlayWaveStatue);
	virtual void GetRect(float *minX,float *minY,float *maxX,float *maxY);
	virtual BOOL IsPoint(float x,float y,float jl,float blc);
//	virtual BOOL IsWindowSelect(short lb,float minX,float minY,float maxX,float maxY,float blc);//lb=1;窗口内lb=2相交;lb=3;窗口内或相交
	virtual BOOL IsCircleSelect(short lb,float minX,float minY,float maxX,float maxY,float blc);//lb=1;圆内lb=2相交;lb=3;圆内或相交
	virtual BOOL IsRgnSelect(short lb,float minX,float minY,float maxX,float maxY,BOOL IsWindow);//lb=1;多边形区域内lb=2相交;lb=3;多边形区域内或相交
	virtual void Save(CFile* file,BOOL Yn);
	virtual void Serialize(CArchive& ar);
	virtual void Move(float x_Move,float y_Move);
	void PutTracker(CRectTracker *pTracker);
	void SetRect(CRectTracker *pTracker);
};

typedef struct
{
	short int Lb;		//类别 1-直线 2-连续直线或多边形区域 3-圆 4-圆弧 5-文本
	short int Index;	//序号
	short int pbh;		//判别号
}GraphSelectStruct;		//用来存储选中图形元素的结构

typedef struct
{
	short DbfLb;		//数据库类别
	short LinkMode;		//连接方式
	short RecordID;		//连接的记录或数据视图的识别号
}FindInfoStruct;		//用来存储查询信息时的一个信息单位

typedef struct
{
	BOOL b_Object;		//记录集合是否用做实体
	short only_ID;		//唯一识别号
	CString Name;		//记录集合名称
	CString NameSource;	//ODBC数据源名称
} DataInfoStru;			//记录集合对象的信息数据结构

typedef struct	//用来记录历史屏幕的数据结构结构
{
	float blc;	//比例尺
	float sx;	//屏幕左下角的横坐标
	float sy;	//屏幕左下角的纵坐标
}ScreenStruct;	

class CDrawDoc : public COleDocument	//应用程序的文档类
{
protected: // create from serialization only
	CDrawDoc();
	DECLARE_DYNCREATE(CDrawDoc)

private:
	CTypedPtrArray<CObArray,CLine*>m_LineArray;		//管理直线对象指针的对象
	CTypedPtrArray<CObArray,CPline*>m_PLineArray;	//管理连续直线对象指针的对象
	CTypedPtrArray<CObArray,CCircle*>m_CircleArray;	//管理圆对象指针的对象
	CTypedPtrArray<CObArray,CArc*>m_ArcArray;		//管理圆弧对象指针的对象
	CTypedPtrArray<CObArray,CText*>m_TextArray;		//管理标注文字对象指针的对象
	CTypedPtrArray<CObArray,CFormrgn*>m_FormrgnArray;		//管理标注文字对象指针的对象
	
	CObArray m_BlockArray;							//管理图形块对象指针的对象
	CObArray m_TagArray;							//管理图例对象指针的对象
	CObArray m_ObjectArray;							//管理实体对象指针的对象
	CObArray m_FormArray;							//管理电子表格对象指针的对象
	CObArray m_ViewformArray;						//管理演示表格对象指针的对象
	CObArray m_DatabaseArray;						//管理记录集合对象的对象数组	
	// Attributes
public:
   

	CBaseMap m_Basemap[100];		//管理底图的对象数组
	int m_BasemapNumb;				//底图的数目
	int GraphNumbStart[10];
	BOOL b_IsOleSelect;				//是否选中了OLE对象
	CGraphPara m_GraphPara;			//定义一个管理图形参数的对象
	GraphSelectStruct *GraphSelect;	//存储选中元素的性质
	int n_GraphSelect;				//选中图形元素的数目

	int BlockIndex;					//当前选择的图形块的序号
	int EditBlockIndex;				//当前编辑的图形块的序号
	int FormIndex;					//当前绘制电子表格的序号
	int m_DrawEdit;					//0-普通1-新建图形块2-编辑既有图形块3-编辑电子表格
	float x_Insert,y_Insert;		//编辑图例时的插入点坐标
	int m_CurrentScreen;			//当前屏幕的序号
	int m_CurrentScreen1;			//当前屏幕的序号
	int m_MaxScreen;				//最多能够有的屏幕数
	ScreenStruct* m_Screen;			//记录屏幕参数的结构指针

	CLine* line1;
	int *m_Index;
	CBlock* p_Form;					//指向电子表格的指针
protected:	
	CString FileName;
	CFile Fundo;					//用来存储逆操作信息的文件指针
	UndoStruct* m_UndoList;			//存储逆操作的索引信息
	int n_CurUnIndex,n_MaxUnIndex;	//当前处于操作的次数和总的操作次数
	int n_CurUnIndex1;
	UINT DrawFormat;
	CBlock* p_Block;		//指向编辑的图形块
	// Operations
public:

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CDrawDoc)
	public:
	virtual BOOL OnNewDocument();			//建立新文档时调用
	virtual void Serialize(CArchive& ar);	//串形化函数
	virtual void DeleteContents();			//删除文档时调用
	virtual void OnCloseDocument();			//关闭文档时调用
	virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);	//打开文档时调用
	virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);	//保存文档时调用
	//}}AFX_VIRTUAL

// Implementation
public:
	void AddScreen(float StartX,float StartY,float blc);
	void Draw(CDC *pDC,int m_DrawMode,int m_DrawMode1,short BackColor);
	void DrawGraph(CDC* pDC,int Lb,int Index,int Mode,int Mode1,short BackColor);
	void OnEditUndo();		//逆操作函数
	//以下两个重载函数用来记录一步操作
	BOOL AddUndo(int Lb,int Numble,GraphSelectStruct* GraphList);
	BOOL AddUndo(float sx,float sy,float blc);
	BOOL WriteClipBoard();							//将图形元素写入剪裁板
	BOOL ReadClipBoard(float x,float y);
	BOOL AddSelectList(int Lb,int Index,int Pbh);			//增加一个选中的图形元素
	//得到所有图形元素的边界按矩形
	BOOL GetRect(float *m_Xmin,float *m_Ymin,float *m_Xmax,float *m_Ymax);
	//进行选中图形元素的操作
	BOOL PointSelect(float x,float y,float jl,float blc,int *Lb,int *Index,int *pbh);
	CLine* AddLine(short ColorPen,short ColorBrush,short
		LineWide,short LineType,short Layer,int id_only,float X1,float Y1,
		float X2,float Y2);		//增加一条直线
	CLine* AddLine();			//增加一条直线
	CLine* AddLine(CLine* pLine);
	CPline* AddPLine(short ColorPen,short ColorBrush,
		short LineWide,short LineType,short Layer,int id_only,int Numble,
		PointStruct* PointList,BOOL b_Fill);
	CPline* AddPLine();
	CPline* AddPLine(CPline* pPline);
	CCircle* AddCircle(short ColorPen,short ColorBrush,
		short LineWide,short LineType,short Layer,int id_only,
		float CircleX,float CircleY,float CircleR,BOOL Fill);	
	CCircle* AddCircle();
	CCircle* AddCircle(CCircle* pCircle);
	CArc* AddArc(short ColorPen,short ColorBrush,short 
		LineWide,short LineType,short Layer,int id_only,float CircleX,
		float CircleY,float CircleR,BOOL Fill,float Angle1,float Angle2);	
	CArc* AddArc();
	CArc* AddArc(CArc* pArc);
	CText* AddText();
	CText* AddText(CText* pText);
	CText* AddText(short ColorPen,short ColorBrush,short
		LineWide,short LineType,short Layer,int id_only,float StartX,
		float StartY,float Angle1,float Angle2,float TextHeight,float TextWide,
		float OffWide,unsigned char TextFont,int TextLong,CString);	
	CTag* AddTag(CTag* pTag);
	CTag* AddTag(short ColorPen,short ColorBrush,short LineWide,short LineType,
		short Layer,float xInsert,float yInsert,float x_Scale,float y_Scale,int only_id,CBlock *pBlock);
	int GetBlockUpperbound();	
	CBlock* AddBlock();								//增加一个图形块
	CBlock* AddForm(CString Name,short DatabaseID);	//增加一个电子表格
	CBlock* GetBlock(int Index);
	CTag* AddTag(short ColorPen,short ColorBrush,short LineWide,short LineType,
		short Layer,float xInsert,float yInsert,float x_Scale,float y_Scale,CBlock *pBlock);
	CGraphObject* GetObject(int Index);	//读取第Index个实体
	void OnEditBlockOk();
	void OnEditBlockCancel();
	void RestoreDraw();
	int	OnBlockDialog();		//调用图形块管理对话框
	int GetBlockIndex(int iD);	
	void SetBlockPoint();		
	void ClearDraw();			
	void OnBlockAdd(float x,float y);

	CDraw* GetGraph(short Lb,int Index);
	int GetGraphNumb(short Lb);
	int GetGraphUpperBound(short Lb);
	int GetGraphID(short Lb);
	void DeleteGraph(short Lb,int Index);

public:
	BOOL dxfRead(CStdioFile* pFile);	//读取DXF文件
	void dxfWrite(CStdioFile* pFile);	//写入DXF文件
	void dxfWriteBegin(CStdioFile* pFile);	//写DXF文件头
	void dxfWriteEnd(CStdioFile* pFile);	//写DXF文件尾

	virtual ~CDrawDoc();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
	//{{AFX_MSG(CDrawDoc)
	afx_msg void OnUpdateSelectClear(CCmdUI* pCmdUI);	//是否能够执行"放弃选择“
	afx_msg void OnEditBlockMenu(CCmdUI* pCmdUI);		//能够在编辑图形块时显示的菜单
	afx_msg void OnEditDrawMenu(CCmdUI* pCmdUI);		//能够在编辑普通图形时显示的菜单
	afx_msg void OnUpdateEditUndo(CCmdUI* pCmdUI);		//是否能够执行"Undo"菜单
	afx_msg void OnUpdateEditPaste(CCmdUI* pCmdUI);
	afx_msg void OnUpdateBlockAdd(CCmdUI* pCmdUI);
	afx_msg void OnUpdateDrawTag(CCmdUI* pCmdUI);
	afx_msg void OnEditExit(CCmdUI* pCmdUI);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////


//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_DrawDOC_H__0EFFC62E_8953_11D2_AE7B_444553540000__INCLUDED_)

⌨️ 快捷键说明

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