home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Total C++ 2
/
TOTALCTWO.iso
/
borland
/
scrib1.pak
/
SCRIBDOC.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1997-05-06
|
4KB
|
170 lines
// ScribDoc.cpp : implementation of the CScribbleDoc class
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1995 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.
#include "stdafx.h"
#include "Scribble.h"
#include "ScribDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CScribbleDoc
IMPLEMENT_DYNCREATE(CScribbleDoc, CDocument)
BEGIN_MESSAGE_MAP(CScribbleDoc, CDocument)
//{{AFX_MSG_MAP(CScribbleDoc)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CScribbleDoc construction/destruction
CScribbleDoc::CScribbleDoc()
{
// TODO: add one-time construction code here
}
CScribbleDoc::~CScribbleDoc()
{
}
BOOL CScribbleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
InitDocument();
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CScribbleDoc serialization
void CScribbleDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
}
else
{
}
m_strokeList.Serialize(ar);
}
/////////////////////////////////////////////////////////////////////////////
// CScribbleDoc diagnostics
#ifdef _DEBUG
void CScribbleDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CScribbleDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CScribbleDoc commands
BOOL CScribbleDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
InitDocument();
return TRUE;
}
void CScribbleDoc::DeleteContents()
{
while (!m_strokeList.IsEmpty())
{
delete m_strokeList.RemoveHead();
}
CDocument::DeleteContents();
}
void CScribbleDoc::InitDocument()
{
m_nPenWidth = 2; // default 2 pixel pen width
// solid, black pen
m_penCur.CreatePen(PS_SOLID, m_nPenWidth, RGB(0,0,0));
}
CStroke* CScribbleDoc::NewStroke()
{
CStroke* pStrokeItem = new CStroke(m_nPenWidth);
m_strokeList.AddTail(pStrokeItem);
SetModifiedFlag(); // Mark the document as having been modified, for
// purposes of confirming File Close.
return pStrokeItem;
}
/////////////////////////////////////////////////////////////////////////////
// CStroke
IMPLEMENT_SERIAL(CStroke, CObject, 1)
CStroke::CStroke()
{
// This empty constructor should be used by serialization only
}
CStroke::CStroke(UINT nPenWidth)
{
m_nPenWidth = nPenWidth;
}
void CStroke::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
ar << (WORD)m_nPenWidth;
m_pointArray.Serialize(ar);
}
else
{
WORD w;
ar >> w;
m_nPenWidth = w;
m_pointArray.Serialize(ar);
}
}
BOOL CStroke::DrawStroke(CDC* pDC)
{
CPen penStroke;
if (!penStroke.CreatePen(PS_SOLID, m_nPenWidth, RGB(0,0,0)))
return FALSE;
CPen* pOldPen = pDC->SelectObject(&penStroke);
pDC->MoveTo(m_pointArray[0]);
for (int i=1; i < m_pointArray.GetSize(); i++)
{
pDC->LineTo(m_pointArray[i]);
}
pDC->SelectObject(pOldPen);
return TRUE;
}