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 + -
显示快捷键?