scribitm.cpp
上传用户:biuytresa
上传日期:2007-12-07
资源大小:721k
文件大小:4k
源码类别:

DNA

开发平台:

Visual C++

  1. // ScribItm.cpp : implementation of the CScribbleItem 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. #include "stdafx.h"
  13. #include "Scribble.h"
  14. #include "ScribDoc.h"
  15. #include "ScribItm.h"
  16. #ifdef _DEBUG
  17. #undef THIS_FILE
  18. static char THIS_FILE[] = __FILE__;
  19. #endif
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CScribbleItem implementation
  22. IMPLEMENT_DYNAMIC(CScribbleItem, COleServerItem)
  23. CScribbleItem::CScribbleItem(CScribbleDoc* pContainerDoc)
  24. : COleServerItem(pContainerDoc, TRUE)
  25. {
  26. // TODO: add one-time construction code here
  27. //  (eg, adding additional clipboard formats to the item's data source)
  28. }
  29. CScribbleItem::~CScribbleItem()
  30. {
  31. // TODO: add cleanup code here
  32. }
  33. void CScribbleItem::Serialize(CArchive& ar)
  34. {
  35. // CScribbleItem::Serialize will be called by the framework if
  36. //  the item is copied to the clipboard.  This can happen automatically
  37. //  through the OLE callback OnGetClipboardData.  A good default for
  38. //  the embedded item is simply to delegate to the document's Serialize
  39. //  function.  If you support links, then you will want to serialize
  40. //  just a portion of the document.
  41. if (!IsLinkedItem())
  42. {
  43. CScribbleDoc* pDoc = GetDocument();
  44. ASSERT_VALID(pDoc);
  45. pDoc->Serialize(ar);
  46. }
  47. }
  48. BOOL CScribbleItem::OnGetExtent(DVASPECT dwDrawAspect, CSize& rSize)
  49. {
  50. // Most applications, like this one, only handle drawing the content
  51. //  aspect of the item.  If you wish to support other aspects, such
  52. //  as DVASPECT_THUMBNAIL (by overriding OnDrawEx), then this
  53. //  implementation of OnGetExtent should be modified to handle the
  54. //  additional aspect(s).
  55. if (dwDrawAspect != DVASPECT_CONTENT)
  56. return COleServerItem::OnGetExtent(dwDrawAspect, rSize);
  57. // CScribbleItem::OnGetExtent is called to get the extent in
  58. //  HIMETRIC units of the entire item.  The default implementation
  59. //  here simply returns a hard-coded number of units.
  60. CScribbleDoc* pDoc = GetDocument();
  61. ASSERT_VALID(pDoc);
  62. rSize = pDoc->GetDocSize();
  63. CClientDC dc(NULL);
  64. // use a mapping mode based on logical units
  65. //  (we can't use MM_LOENGLISH because MM_LOENGLISH uses physical inches)
  66. dc.SetMapMode(MM_ANISOTROPIC);
  67. dc.SetViewportExt(dc.GetDeviceCaps(LOGPIXELSX), dc.GetDeviceCaps(LOGPIXELSY));
  68. dc.SetWindowExt(100, -100);
  69. dc.LPtoHIMETRIC(&rSize);
  70. return TRUE;
  71. }
  72. BOOL CScribbleItem::OnDraw(CDC* pDC, CSize& /* rSize */)
  73. {
  74. CScribbleDoc* pDoc = GetDocument();
  75. ASSERT_VALID(pDoc);
  76. pDC->SetMapMode(MM_ANISOTROPIC);
  77. CSize sizeDoc = pDoc->GetDocSize();
  78. sizeDoc.cy = -sizeDoc.cy;
  79. pDC->SetWindowOrg(0,0);
  80. pDC->SetWindowExt(sizeDoc);
  81. CTypedPtrList<CObList,CStroke*>& strokeList = pDoc->m_strokeList;
  82. POSITION pos = strokeList.GetHeadPosition();
  83. while (pos != NULL)
  84. {
  85. strokeList.GetNext(pos)->DrawStroke(pDC);
  86. }
  87. return TRUE;
  88. }
  89. /////////////////////////////////////////////////////////////////////////////
  90. // CScribbleItem diagnostics
  91. #ifdef _DEBUG
  92. void CScribbleItem::AssertValid() const
  93. {
  94. COleServerItem::AssertValid();
  95. }
  96. void CScribbleItem::Dump(CDumpContext& dc) const
  97. {
  98. COleServerItem::Dump(dc);
  99. }
  100. #endif
  101. /////////////////////////////////////////////////////////////////////////////