Scribitm.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:4k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // ScribItm.cpp : implementation of the CScribbleItem class
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "Scribble.h"
  22. #include "ScribDoc.h"
  23. #include "ScribItm.h"
  24. #ifdef _DEBUG
  25. #undef THIS_FILE
  26. static char THIS_FILE[] = __FILE__;
  27. #endif
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CScribbleItem implementation
  30. IMPLEMENT_DYNAMIC(CScribbleItem, COleServerItem)
  31. CScribbleItem::CScribbleItem(CScribbleDoc* pContainerDoc)
  32. : COleServerItem(pContainerDoc, TRUE)
  33. {
  34. // TODO: add one-time construction code here
  35. //  (eg, adding additional clipboard formats to the item's data source)
  36. }
  37. CScribbleItem::~CScribbleItem()
  38. {
  39. // TODO: add cleanup code here
  40. }
  41. void CScribbleItem::Serialize(CArchive& ar)
  42. {
  43. // CScribbleItem::Serialize will be called by the framework if
  44. //  the item is copied to the clipboard.  This can happen automatically
  45. //  through the OLE callback OnGetClipboardData.  A good default for
  46. //  the embedded item is simply to delegate to the document's Serialize
  47. //  function.  If you support links, then you will want to serialize
  48. //  just a portion of the document.
  49. if (!IsLinkedItem())
  50. {
  51. CScribbleDoc* pDoc = GetDocument();
  52. ASSERT_VALID(pDoc);
  53. pDoc->Serialize(ar);
  54. }
  55. }
  56. BOOL CScribbleItem::OnGetExtent(DVASPECT dwDrawAspect, CSize& rSize)
  57. {
  58. // Most applications, like this one, only handle drawing the content
  59. //  aspect of the item.  If you wish to support other aspects, such
  60. //  as DVASPECT_THUMBNAIL (by overriding OnDrawEx), then this
  61. //  implementation of OnGetExtent should be modified to handle the
  62. //  additional aspect(s).
  63. if (dwDrawAspect != DVASPECT_CONTENT)
  64. return COleServerItem::OnGetExtent(dwDrawAspect, rSize);
  65. // CScribbleItem::OnGetExtent is called to get the extent in
  66. //  HIMETRIC units of the entire item.  The default implementation
  67. //  here simply returns a hard-coded number of units.
  68. CScribbleDoc* pDoc = GetDocument();
  69. ASSERT_VALID(pDoc);
  70. rSize = pDoc->GetDocSize();
  71. CClientDC dc(NULL);
  72. // use a mapping mode based on logical units
  73. //  (we can't use MM_LOENGLISH because MM_LOENGLISH uses physical inches)
  74. dc.SetMapMode(MM_ANISOTROPIC);
  75. dc.SetViewportExt(dc.GetDeviceCaps(LOGPIXELSX), dc.GetDeviceCaps(LOGPIXELSY));
  76. dc.SetWindowExt(100, -100);
  77. dc.LPtoHIMETRIC(&rSize);
  78. return TRUE;
  79. }
  80. BOOL CScribbleItem::OnDraw(CDC* pDC, CSize& /* rSize */)
  81. {
  82. CScribbleDoc* pDoc = GetDocument();
  83. ASSERT_VALID(pDoc);
  84. pDC->SetMapMode(MM_ANISOTROPIC);
  85. CSize sizeDoc = pDoc->GetDocSize();
  86. sizeDoc.cy = -sizeDoc.cy;
  87. pDC->SetWindowOrg(0,0);
  88. pDC->SetWindowExt(sizeDoc);
  89. CTypedPtrList<CObList,CStroke*>& strokeList = pDoc->m_strokeList;
  90. POSITION pos = strokeList.GetHeadPosition();
  91. while (pos != NULL)
  92. {
  93. strokeList.GetNext(pos)->DrawStroke(pDC);
  94. }
  95. return TRUE;
  96. }
  97. /////////////////////////////////////////////////////////////////////////////
  98. // CScribbleItem diagnostics
  99. #ifdef _DEBUG
  100. void CScribbleItem::AssertValid() const
  101. {
  102. COleServerItem::AssertValid();
  103. }
  104. void CScribbleItem::Dump(CDumpContext& dc) const
  105. {
  106. COleServerItem::Dump(dc);
  107. }
  108. #endif
  109. /////////////////////////////////////////////////////////////////////////////