135 lines
3.7 KiB
C++
135 lines
3.7 KiB
C++
// ScribDoc.h : interface of the CScribbleDoc class
|
|
//
|
|
// This is a part of the Microsoft Foundation Classes C++ library.
|
|
// Copyright (C) 1992-1997 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 CScribbleItem;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// 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
|
|
protected:
|
|
UINT m_nPenWidth; // one pen width applies to entire stroke
|
|
public:
|
|
CArray<CPoint,CPoint> 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 CScribbleDoc : public COleServerDoc, public COXUndo
|
|
{
|
|
protected: // create from serialization only
|
|
CScribbleDoc();
|
|
DECLARE_DYNCREATE(CScribbleDoc)
|
|
|
|
// 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<CObList,CStroke*> m_strokeList;
|
|
CPen* GetCurrentPen() { return &m_penCur; }
|
|
|
|
protected:
|
|
CSize m_sizeDoc;
|
|
public:
|
|
CSize GetDocSize() { return m_sizeDoc; }
|
|
CScribbleItem* GetEmbeddedItem()
|
|
{ return (CScribbleItem*)COleServerDoc::GetEmbeddedItem(); }
|
|
|
|
// Operations
|
|
public:
|
|
CStroke* NewStroke();
|
|
|
|
// Overrides
|
|
// ClassWizard generated virtual function overrides
|
|
//{{AFX_VIRTUAL(CScribbleDoc)
|
|
protected:
|
|
virtual COleServerItem* OnGetEmbeddedItem();
|
|
public:
|
|
virtual BOOL OnNewDocument();
|
|
virtual void Serialize(CArchive& ar);
|
|
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
|
|
virtual void DeleteContents();
|
|
//}}AFX_VIRTUAL
|
|
|
|
// Implementation
|
|
protected:
|
|
void ReplacePen();
|
|
void OnSetItemRects(LPCRECT lpPosRect, LPCRECT lpClipRect);
|
|
|
|
public:
|
|
virtual ~CScribbleDoc();
|
|
#ifdef _DEBUG
|
|
virtual void AssertValid() const;
|
|
virtual void Dump(CDumpContext& dc) const;
|
|
#endif
|
|
|
|
protected:
|
|
void InitDocument();
|
|
|
|
// Generated message map functions
|
|
protected:
|
|
//{{AFX_MSG(CScribbleDoc)
|
|
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 void OnEditUndo();
|
|
afx_msg void OnUpdateEditUndo(CCmdUI* pCmdUI);
|
|
afx_msg void OnEditRedo();
|
|
afx_msg void OnUpdateEditRedo(CCmdUI* pCmdUI);
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
};
|
|
|