SCRIBDOC.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // scribdoc.h : interface of the CScribDoc class
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12. //
  13. // Forward declaration of data structure class
  14. class CScribItem;
  15. /////////////////////////////////////////////////////////////////////////////
  16. // class CStroke
  17. //
  18. // A stroke is a series of connected points in the scribble drawing.
  19. // A scribble document may have multiple strokes.
  20. class CStroke : public CObject
  21. {
  22. public:
  23. CStroke(UINT nPenWidth);
  24. protected:
  25. CStroke();
  26. DECLARE_SERIAL(CStroke)
  27. // Attributes
  28. UINT                   m_nPenWidth;    // one pen width applies to entire stroke
  29. CArray<CPoint,CPoint>  m_pointArray;   // series of connected points
  30. CRect               m_rectBounding; // smallest rect that surrounds all
  31. // of the points in the stroke
  32. // measured in MM_LOENGLISH units
  33. // (0.01 inches, with Y-axis inverted)
  34. public:
  35. CRect& GetBoundingRect() { return m_rectBounding; }
  36. // Operations
  37. public:
  38. BOOL DrawStroke(CDC* pDC);
  39. void FinishStroke();
  40. public:
  41. virtual void Serialize(CArchive& ar);
  42. };
  43. /////////////////////////////////////////////////////////////////////////////
  44. // class CScribDoc
  45. class CScribDoc : public COleServerDoc
  46. {
  47. protected: // create from serialization only
  48. CScribDoc();
  49. DECLARE_DYNCREATE(CScribDoc)
  50. // Attributes
  51. protected:
  52. // The document keeps track of the current pen width on
  53. // behalf of all views. We'd like the user interface of
  54. // Scribble to be such that if the user chooses the Draw
  55. // Thick Line command, it will apply to all views, not just
  56. // the view that currently has the focus.
  57. UINT            m_nPenWidth;        // current user-selected pen width
  58. BOOL            m_bThickPen;        // TRUE if current pen is thick
  59. UINT            m_nThinWidth;
  60. UINT            m_nThickWidth;
  61. CPen            m_penCur;           // pen created according to
  62. // user-selected pen style (width)
  63. public:
  64. CTypedPtrList<CObList,CStroke*>     m_strokeList;
  65. CPen*           GetCurrentPen() { return &m_penCur; }
  66. protected:
  67. CSize           m_sizeDoc;
  68. public:
  69. CSize GetDocSize() { return m_sizeDoc; }
  70. COleServerItem* OnGetEmbeddedItem();
  71. CScribItem* GetEmbeddedItem()
  72. { return (CScribItem*)COleServerDoc::GetEmbeddedItem(); }
  73. CDocObjectServer* GetDocObjectServer(LPOLEDOCUMENTSITE pSite);
  74. // Operations
  75. public:
  76. CStroke* NewStroke();
  77. // Overrides
  78. // ClassWizard generated virtual function overrides
  79. //{{AFX_VIRTUAL(CScribDoc)
  80. public:
  81. virtual BOOL OnNewDocument();
  82. virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
  83. virtual void DeleteContents();
  84. //}}AFX_VIRTUAL
  85. // Implementation
  86. protected:
  87. void ReplacePen();
  88. void OnSetItemRects(LPCRECT lpPosRect, LPCRECT lpClipRect);
  89. public:
  90. virtual ~CScribDoc();
  91. virtual void Serialize(CArchive& ar);   // overridden for document i/o
  92. #ifdef _DEBUG
  93. virtual void AssertValid() const;
  94. virtual void Dump(CDumpContext& dc) const;
  95. #endif
  96. protected:
  97. void            InitDocument();
  98. // Generated message map functions
  99. protected:
  100. //{{AFX_MSG(CScribDoc)
  101. afx_msg void OnEditClearAll();
  102. afx_msg void OnPenThickOrThin();
  103. afx_msg void OnUpdateEditClearAll(CCmdUI* pCmdUI);
  104. afx_msg void OnUpdatePenThickOrThin(CCmdUI* pCmdUI);
  105. afx_msg void OnPenWidths();
  106. afx_msg void OnEditCopy();
  107. //}}AFX_MSG
  108. DECLARE_MESSAGE_MAP()
  109. DECLARE_OLECMD_MAP()
  110. };