// scribdoc.h : interface of the CScribDoc class // // This is a part of the Microsoft Foundation Classes C++ library. // Copyright (C) 1992-1998 Microsoft Corporation // All rights reserved. // // This source code is only intended as a supplement to the // Microsoft Foundation Classes Reference and related // electronic documentation provided with the library. // See these sources for detailed information regarding the // Microsoft Foundation Classes product. // // Forward declaration of data structure class class CScribItem; ///////////////////////////////////////////////////////////////////////////// // class CStroke // // A stroke is a series of connected points in the scribble drawing. // A scribble document may have multiple strokes. class CStroke : public CObject { public: CStroke(UINT nPenWidth); protected: CStroke(); DECLARE_SERIAL(CStroke) // Attributes UINT m_nPenWidth; // one pen width applies to entire stroke CArray m_pointArray; // series of connected points CRect m_rectBounding; // smallest rect that surrounds all // of the points in the stroke // measured in MM_LOENGLISH units // (0.01 inches, with Y-axis inverted) public: CRect& GetBoundingRect() { return m_rectBounding; } // Operations public: BOOL DrawStroke(CDC* pDC); void FinishStroke(); public: virtual void Serialize(CArchive& ar); }; ///////////////////////////////////////////////////////////////////////////// // class CScribDoc class CScribDoc : public COleServerDoc { protected: // create from serialization only CScribDoc(); DECLARE_DYNCREATE(CScribDoc) // Attributes protected: // The document keeps track of the current pen width on // behalf of all views. We'd like the user interface of // Scribble to be such that if the user chooses the Draw // Thick Line command, it will apply to all views, not just // the view that currently has the focus. UINT m_nPenWidth; // current user-selected pen width BOOL m_bThickPen; // TRUE if current pen is thick UINT m_nThinWidth; UINT m_nThickWidth; CPen m_penCur; // pen created according to // user-selected pen style (width) public: CTypedPtrList m_strokeList; CPen* GetCurrentPen() { return &m_penCur; } protected: CSize m_sizeDoc; public: CSize GetDocSize() { return m_sizeDoc; } COleServerItem* OnGetEmbeddedItem(); CScribItem* GetEmbeddedItem() { return (CScribItem*)COleServerDoc::GetEmbeddedItem(); } CDocObjectServer* GetDocObjectServer(LPOLEDOCUMENTSITE pSite); // Operations public: CStroke* NewStroke(); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CScribDoc) public: virtual BOOL OnNewDocument(); virtual BOOL OnOpenDocument(LPCTSTR lpszPathName); virtual void DeleteContents(); //}}AFX_VIRTUAL // Implementation protected: void ReplacePen(); void OnSetItemRects(LPCRECT lpPosRect, LPCRECT lpClipRect); public: virtual ~CScribDoc(); virtual void Serialize(CArchive& ar); // overridden for document i/o #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: void InitDocument(); // Generated message map functions protected: //{{AFX_MSG(CScribDoc) afx_msg void OnEditClearAll(); afx_msg void OnPenThickOrThin(); afx_msg void OnUpdateEditClearAll(CCmdUI* pCmdUI); afx_msg void OnUpdatePenThickOrThin(CCmdUI* pCmdUI); afx_msg void OnPenWidths(); afx_msg void OnEditCopy(); //}}AFX_MSG DECLARE_MESSAGE_MAP() DECLARE_OLECMD_MAP() };