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

📄 drawdoc.h

📁 陈建春<用VC++开发GIS系统>源码.适合于GIS学习者,以及学习图形图象编程的朋友.
💻 H
📖 第 1 页 / 共 2 页
字号:
		BOOL Delete,int Numble,PointStruct* PointList,BOOL Fill)
		:CDraw(ColorPen,ColorBrush,LineWide,LineType,Layer,id_only,Delete)
	{
		m_Numble=Numble;
		b_Fill=Fill;
		m_PointList=new PointStruct[Numble+1];	//分配空间
		if(Numble>0)	
		{
			for(int i=0;i<Numble;i++)
				m_PointList[i]=PointList[i];
		}
	}
	~CPline()	//析够函数
	{
		if(m_Numble>0)
			delete m_PointList;
	}
	virtual void Draw(CDC *pDC,int m_DrawMode,int m_DrawMode1,short BackColor);
	void GetRect(float *minX,float *minY,float *maxX,float *maxY);
	BOOL IsPoint(float x,float y,float jl,float blc);
	BOOL IsPLine();
	void Save(CFile* file,BOOL Yn);
	virtual void Serialize(CArchive& ar);
	void toChar(char *p_Char);
	char *toData(char *p_Char);
	int GetNumb();
	void Move(float x_Move,float y_Move);
	int LineRgn(CLine* line1,int *nCross,PointStruct* Pointxy1);
	int PLineRgn(CPline* pline1,int *nCross,PointStruct* Pointxy1);
	int ArcRgn(CArc* arc1,int *nCross,PointStruct *Pointxy1);
};

class CText:public CDraw	//标注文本类
{
protected:
	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;		//标注信息的长度
	DECLARE_SERIAL(CText);
public:
	CText()		//不带任何参数的构造函数
	{}
	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)
	{
		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);
	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);
	void GetRect(float *minX,float *minY,float *maxX,float *maxY);
	BOOL IsPoint(float x,float y,float jl,float blc);
	void Save(CFile* file,BOOL Yn);
	virtual void Serialize(CArchive& ar);
	void toChar(char *p_Char);
	char *toData(char *p_Char);
	int GetLong();
	void Move(float x_Move,float y_Move);
};

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

typedef struct
{
	short only_ID;
	char Name[20];
} 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;	//管理标注文字对象指针的对象
	// Attributes
public:
	BOOL b_IsOleSelect;			//是否选中了OLE对象
	CGraphPara m_GraphPara;	//定义一个管理图形参数的对象
	GraphSelectStruct *GraphSelect;	//存储选中元素的性质
	int n_GraphSelect;				//选中图形元素的数目
	int m_CurrentScreen;		//当前屏幕的序号
	int m_MaxScreen;			//最多能够有的屏幕数
	ScreenStruct* m_Screen;		//记录屏幕参数的结构指针
	CLine* line1;
	CData1Set m_data1;
	CData2Set m_data2;
	CLinkDataSet m_linkdata1;
	int *m_Index;
	DataInfoStru DataInfo[30];
	short m_NumbData;
protected:	
	CString FilePath,FileName;		//存储逆操作文档的路径和文件名
	CFile Fundo;					//用来存储逆操作信息的文件指针
	UndoStruct* m_UndoList;			//存储逆操作的索引信息
	int n_CurUnIndex,n_MaxUnIndex;	//当前处于操作的次数和总的操作次数
	UINT DrawFormat;
	// 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 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();		//逆操作函数
	int GetMaxIndex(int Lb);//得到各类图形元素顶最大索引号
	//以下两个重载函数用来记录一步操作
	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* GetLine(int Index);	//得到第Index条直线
	int GetNumbLines();			//得到直线的数目
	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* GetPLine(int Index);
	int GetNumbPLines();
	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* GetCircle(int Index);
	int GetNumbCircles();
	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* GetArc(int Index);
	int GetNumbArcs();
	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);	
	CText* AddText();
	void AddScreen(float StartX,float StartY,float blc);//增加一个图形屏幕
	CText* GetText(int Index);
	int GetNumbTexts();
	int GetLineId();
	int GetPLineId();
	int GetCircleId();
	int GetArcId();
	int GetTextId();
	CDataBaseSet *GetDataSet(int Index);
	short GetDataID(int Index);
	short GetDataIndex(int ID);

	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 OnUpdateEditUndo(CCmdUI* pCmdUI);	//是否能够执行"Undo"菜单
	afx_msg void OnTest();
	//}}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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -