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

对话框与窗口

开发平台:

Visual C++

  1. // XTPReportHyperlink.cpp : implementation of the CXTPReportHyperlink class.
  2. //
  3. // This file is a part of the XTREME REPORTCONTROL 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 "XTPReportHyperlink.h"
  22. #include "Common/XTPPropExchange.h"
  23. #ifdef _DEBUG
  24. #undef THIS_FILE
  25. static char THIS_FILE[] = __FILE__;
  26. #define new DEBUG_NEW
  27. #endif
  28. IMPLEMENT_DYNAMIC(CXTPReportHyperlink, CCmdTarget)
  29. IMPLEMENT_DYNAMIC(CXTPReportHyperlinks, CCmdTarget)
  30. //////////////////////////////////////////////////////////////////////
  31. // Construction/Destruction
  32. //////////////////////////////////////////////////////////////////////
  33. CXTPReportHyperlink::CXTPReportHyperlink(int nHyperTextBegin, int nHyperTextLen)
  34. : m_nHyperTextBegin(nHyperTextBegin),
  35. m_nHyperTextLen(nHyperTextLen),
  36. m_rcHyperSpot(0, 0, 0, 0)
  37. {
  38. }
  39. CXTPReportHyperlink::~CXTPReportHyperlink()
  40. {
  41. }
  42. void CXTPReportHyperlink::DoPropExchange(CXTPPropExchange* pPX)
  43. {
  44. PX_Int(pPX, _T("HyperTextBegin"), m_nHyperTextBegin);
  45. PX_Int(pPX, _T("HyperTextLen"), m_nHyperTextLen);
  46. }
  47. CXTPReportHyperlinks::CXTPReportHyperlinks()
  48. {
  49. }
  50. CXTPReportHyperlinks::~CXTPReportHyperlinks()
  51. {
  52. RemoveAll();
  53. }
  54. void CXTPReportHyperlinks::RemoveAt(int nIndex)
  55. {
  56. if (nIndex < 0 || nIndex >= (int)GetSize())
  57. {
  58. ASSERT(FALSE);
  59. return;
  60. }
  61. CXTPReportHyperlink* pItem = GetAt(nIndex);
  62. if (pItem)
  63. pItem->InternalRelease();
  64. TBase::RemoveAt(nIndex);
  65. }
  66. void CXTPReportHyperlinks::RemoveAll()
  67. {
  68. for (int nItem = (int)GetSize() - 1; nItem >= 0; nItem--)
  69. {
  70. CXTPReportHyperlink* pItem = GetAt(nItem);
  71. if (pItem)
  72. pItem->InternalRelease();
  73. }
  74. TBase::RemoveAll();
  75. }
  76. void CXTPReportHyperlinks::DoPropExchange(CXTPPropExchange* pPX)
  77. {
  78. int nCount = (int)GetSize();
  79. CXTPPropExchangeEnumeratorPtr pEnumItems(pPX->GetEnumerator(_T("Hyperlink")));
  80. if (pPX->IsStoring())
  81. {
  82. POSITION posItem = pEnumItems->GetPosition((DWORD)nCount);
  83. for (int i = 0; i < nCount; i++)
  84. {
  85. CXTPReportHyperlink* pItem = GetAt(i);
  86. ASSERT(pItem);
  87. if (pItem)
  88. {
  89. CXTPPropExchangeSection secItem(pEnumItems->GetNext(posItem));
  90. pItem->DoPropExchange(&secItem);
  91. }
  92. }
  93. }
  94. else
  95. {
  96. POSITION posItem = pEnumItems->GetPosition();
  97. while (posItem)
  98. {
  99. CXTPReportHyperlink* pItem = new CXTPReportHyperlink();
  100. if (!pItem)
  101. {
  102. return;
  103. }
  104. CXTPPropExchangeSection secItem(pEnumItems->GetNext(posItem));
  105. pItem->DoPropExchange(&secItem);
  106. Add(pItem);
  107. }
  108. }
  109. }
  110. void CXTPReportHyperlinks::CopyFrom(CXTPReportHyperlinks* pSrc)
  111. {
  112. if (pSrc == this)
  113. return;
  114. RemoveAll();
  115. if (!pSrc)
  116. return;
  117. int nCount = pSrc->GetSize();
  118. for (int i = 0; i < nCount; i++)
  119. {
  120. CXTPReportHyperlink* pHlnk = pSrc->GetAt(i);
  121. if (pHlnk)
  122. {
  123. pHlnk->InternalAddRef();
  124. Add(pHlnk);
  125. }
  126. }
  127. }