MyManageGraphObj.h
上传用户:netltd
上传日期:2013-02-12
资源大小:7234k
文件大小:6k
源码类别:

绘图程序

开发平台:

Visual C++

  1. #include "MyGraphObject.h"
  2. #include "MyDraw.h"
  3. #include "MyCommand.h"
  4. #include "MyFileLayer.h"
  5. //被选择对象信息类
  6. class CSelectedObjectInfo: public CObject
  7. {
  8. public:
  9. int     m_type;
  10. int     m_index;
  11. CRect   m_range;
  12. public:
  13. CSelectedObjectInfo(int type, int index);
  14. };
  15. ///////////////////////////////////////////////////////////////////////////////////////////////
  16. class CManageGraphObject:public CObject
  17. {
  18. public:
  19. DECLARE_DYNCREATE(CManageGraphObject)
  20.     CManageGraphObject();
  21. void Serialize(CArchive& ar);
  22. ~CManageGraphObject();
  23. public:
  24. CDrawGrapObject m_DrawGrapObject;
  25. private:
  26.     SIZE     LogicSize;    //逻辑区的尺寸,等于图纸大小加额外尺寸 
  27. public:
  28. float    Proportion;   //图形缩放比例
  29. private:
  30. CPoint   StartPoint;   //画直线、矩形、圆、圆弧时的起始点(画圆时,是圆的圆心) 
  31. CPoint   MidPoint;    //画圆弧时的中间点   
  32. CPoint   EndPoint;     //画直线、矩形、圆、圆弧时的结束点 
  33. CPoint   oldMidPoint;  //上一次画圆弧时的中间点 
  34. CPoint   oldEndPoint;  //上一次画直线、矩形、圆、圆弧时的结束点 
  35. private:
  36. COLORREF PenColor;     //画笔颜色
  37. int      LineStyle;    //画笔线形
  38. public:
  39. void     SetLogicSize(SIZE size);       //获取逻辑区的尺寸
  40. void     SetLineStyle(int style);       //获取画笔线形
  41. void     SetPenColor(COLORREF color);   //获取画笔颜色  
  42. public:
  43. //对象类指针数组
  44. CObArray m_LineArray;
  45. CObArray m_RectArray;
  46. CObArray m_CircleArray;
  47. CObArray m_ArcArray;
  48.     
  49. //对象信息类指针数组
  50. CObArray m_LineInfoArray;
  51. CObArray m_RectInfoArray;
  52. CObArray m_CircleInfoArray;
  53. CObArray m_ArcInfoArray;
  54. //被选中对象信息类指针数组
  55. CObArray m_SelObjInfoArray;
  56.     
  57. public:
  58. void Initialize(SIZE size, int style, COLORREF color);  //初始化内部参数
  59. private:
  60.     CCommandStack * pCommandStack;  //命令类指针
  61. public:
  62.     void GetCommandStack(CCommandStack* pStack); //获取命令类指针
  63. private:
  64.     CManageFileLayer* pManageLayer;  //命令类指针
  65. public:
  66.     void GetManageFileLayer(CManageFileLayer* pManage); //获取命令类指针
  67. private:
  68.     CString CurrentLayerName;  
  69. public:
  70.     void SetCurrentLayerName(CString layername); //图层管理类指针
  71. private:
  72. CDC*   pDC;    //图形设备指针
  73. CView* pView;  //视指针
  74. public:
  75. void GetDC(CDC* pClientDC); //获取图形设备指针
  76. void GetView(CView* view);  //获取视指针
  77. private:
  78. int  LRepeatTimes; //在当前绘图命令下鼠标左键点击次数
  79. int  RRepeatTimes; //在当前绘图命令下鼠标右键点击次数
  80. public:
  81. void OnLButtonDown(UINT ID, CPoint point);
  82. UINT OnRButtonDown(UINT ID, CPoint point);
  83. void OnMouseMove(UINT ID, CPoint point);
  84. void OnScroll(UINT ID);
  85. void OnRedo();
  86. void OnUndo();
  87. public:
  88. UINT OnDrawLine(UINT msg, CPoint point);
  89. UINT OnDrawRect(UINT msg, CPoint point);
  90. UINT OnDrawCircle(UINT msg, CPoint point);
  91. UINT OnDrawArc(UINT msg, CPoint point);
  92. public:
  93. UINT OnModifyDelete();
  94. public:
  95. POINT  DrawingToLogic(FPOINT fpoint);     //将点的图纸坐标转换为逻辑坐标
  96. long   DrawingToLogic(float fdistance);   //将图纸距离转换为逻辑距离 
  97. FPOINT LogicToDrawing(POINT point);       //将点的逻辑坐标转换为图纸坐标
  98. float  LogicToDrawing(long distance);     //将转换逻辑距离为图纸距离 
  99. private:
  100. CRect  LogicClientRect;                   //窗口占有的逻辑区
  101. public:
  102. CRect  GetLogicClientRect();              //获取窗口占有的逻辑区 
  103. BOOL   IsInLogicClientRect(CRect rect);   //图形对象是否在窗口占有的逻辑区内,rect
  104.                                           //是图形对象所占有的逻辑区 
  105.  
  106. private:
  107. CRect  EffectRect;  //发生变化的逻辑区
  108. public:
  109. void   SetEffectRect(CRect rect); //设置发生变化的逻辑区
  110. public: 
  111. //获取需要重画的逻辑区域,参数effectRect是发生变化的逻辑区
  112. //参数clientRect是窗口占有的逻辑区
  113. CRect  GetRedrawRect(CRect effectRect, CRect clientRect); 
  114. //判断图形对象是否需要重画
  115. BOOL   IsRedraw(CRect redrawRect, CRect objRect);  
  116. public:
  117. void GetObjectRange();                        //获取所有图形对象所占据的逻辑区
  118. void RedrawAllObject(CDC* pDC);               //重画所有图形对象
  119. void SelectObject(CDC* pDC, CPoint point);    //选取图形对象
  120. BOOL UnselectObject();                        //取消选取图形对象
  121. public:
  122. void RedrawLine(CDC* pDC);    //重画所有的Line对象
  123. void SelectLine(CDC* pDC, CPoint point);      //选取直线对象 
  124.     BOOL UnselectLine();
  125. void AddLine(POINT SPoint, POINT EPoint, int Style, COLORREF Color);  //增加直线对象
  126.     CMyLine* GetLine(int index);                  //获取指定序号的直线对象 
  127.     void DelLine(int index);                      //删除指定序号的直线对象 
  128.     void DelAllLine();                            //删除所有的直线对象 
  129. CRect GetLineRange(long ExtraRange, CMyLine* pLine);    //获取直线对象所占据的逻辑区 
  130. public:
  131. void RedrawRect(CDC* pDC);  
  132. void SelectRect(CDC* pDC, CPoint point);
  133.     BOOL UnselectRect();
  134. void AddRect(POINT SPoint, POINT EPoint, int Style, COLORREF Color);
  135. CMyRect* GetRect(int index);
  136. void DelRect(int index);                      
  137. void DelAllRect();
  138. CRect GetRectRange(long ExtraRange, CMyRect* pRect);
  139. public:
  140. void RedrawCircle(CDC* pDC);  
  141. void SelectCircle(CDC* pDC, CPoint point);
  142.     BOOL UnselectCircle();
  143. void AddCircle(POINT SPoint, POINT EPoint, int Style, COLORREF Color);
  144. CMyCircle* GetCircle(int index);
  145. void DelCircle(int index);
  146. void DelAllCircle();
  147. CRect GetCircleRange(long ExtraRange, CMyCircle* pCircle);
  148. public:
  149. void RedrawArc(CDC* pDC);  
  150. void SelectArc(CDC* pDC, CPoint point);
  151.     BOOL UnselectArc();
  152. void AddArc(POINT SPoint, POINT MPoint, POINT EPoint, int Style, COLORREF Color);
  153. CMyArc* GetArc(int index);
  154. void DelArc(int index);
  155. void DelAllArc();
  156. CRect GetArcRange(long ExtraRange, CMyArc* pArc);
  157. };