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

对话框与窗口

开发平台:

Visual C++

  1. // XTPReportRecordItemProgress.cpp : implementation of the CXTPReportRecordItemProgress 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 "XTPReportRecordItemProgress.h"
  22. #ifdef _DEBUG
  23. #define new DEBUG_NEW
  24. #undef THIS_FILE
  25. static char THIS_FILE[] = __FILE__;
  26. #endif
  27. //////////////////////////////////////////////////////////////////////////
  28. // CXTPReportRecordItemProgress
  29. IMPLEMENT_SERIAL(CXTPReportRecordItemProgress, CXTPReportRecordItemText, VERSIONABLE_SCHEMA | _XTP_SCHEMA_CURRENT)
  30. CXTPReportRecordItemProgress::CXTPReportRecordItemProgress(LPCTSTR szText)
  31. : CXTPReportRecordItemText(szText)
  32. {
  33. m_clrProgress = RGB(0, 0, 0);
  34. m_nProgressWidth = 1;
  35. m_nProgressLower = 0;
  36. m_nProgressUpper = 100;
  37. m_nProgressStep = 3;
  38. m_nProgressPos = 0;
  39. }
  40. CXTPReportRecordItemProgress::CXTPReportRecordItemProgress(LPCTSTR szText, COLORREF clrProgress, int nWidth, int nLower, int nUpper, int nStep, int nPos)
  41. : CXTPReportRecordItemText(szText)
  42. {
  43. m_clrProgress = clrProgress;
  44. m_nProgressWidth = nWidth;
  45. m_nProgressLower = nLower;
  46. m_nProgressUpper = nUpper;
  47. m_nProgressStep = nStep;
  48. m_nProgressPos = nPos;
  49. }
  50. /*
  51. void CXTPReportRecordItemText::DoPropExchange(CXTPPropExchange* pPX)
  52. {
  53. CXTPReportRecordItem::DoPropExchange(pPX);
  54. PX_String(pPX, _T("Text"), m_strText, _T(""));
  55. PX_String(pPX, _T("Color"), m_clrProgress, _T(""));
  56. PX_String(pPX, _T("Width"), m_nProgressWidth, _T(""));
  57. PX_String(pPX, _T("Lower"), m_nProgressLower, _T(""));
  58. PX_String(pPX, _T("Upper"), m_nProgressUpper, _T(""));
  59. PX_String(pPX, _T("Step"), m_nProgressStep, _T(""));
  60. PX_String(pPX, _T("Position"), m_nProgressPos, _T(""));
  61. }
  62. */
  63. void CXTPReportRecordItemProgress::SetProgressColor(COLORREF clrProgress)
  64. {
  65. m_clrProgress = clrProgress;
  66. }
  67. COLORREF CXTPReportRecordItemProgress::GetProgressColor()
  68. {
  69. return m_clrProgress;
  70. }
  71. void CXTPReportRecordItemProgress::SetProgressWidth(int nWidth)
  72. {
  73. m_nProgressWidth = nWidth;
  74. }
  75. int CXTPReportRecordItemProgress::GetProgressWidth()
  76. {
  77. return m_nProgressWidth;
  78. }
  79. void CXTPReportRecordItemProgress::SetProgressRange(int nLower, int nUpper)
  80. {
  81. m_nProgressLower = nLower;
  82. m_nProgressUpper = nUpper;
  83. }
  84. void CXTPReportRecordItemProgress::GetProgressRange(int& nLower, int& nUpper)
  85. {
  86. nLower = m_nProgressLower;
  87. nUpper = m_nProgressUpper;
  88. }
  89. void CXTPReportRecordItemProgress::SetProgressStep(int nStep)
  90. {
  91. m_nProgressStep = nStep;
  92. }
  93. int CXTPReportRecordItemProgress::GetProgressStep()
  94. {
  95. return m_nProgressStep;
  96. }
  97. int CXTPReportRecordItemProgress::SetProgressPos(int nPos)
  98. {
  99. int nPrevPos = m_nProgressPos;
  100. m_nProgressPos = nPos;
  101. m_nProgressPos = min(m_nProgressPos, m_nProgressUpper);
  102. m_nProgressPos = max(m_nProgressPos, m_nProgressLower);
  103. return nPrevPos;
  104. }
  105. int CXTPReportRecordItemProgress::GetProgressPos()
  106. {
  107. return m_nProgressPos;
  108. }
  109. int CXTPReportRecordItemProgress::GetProgressPosPercent()
  110. {
  111. return (m_nProgressPos - m_nProgressLower) * 100 / (m_nProgressUpper - m_nProgressLower);
  112. }
  113. int CXTPReportRecordItemProgress::OffsetProgressPos(int nOffset)
  114. {
  115. int nPrevPos = m_nProgressPos;
  116. m_nProgressPos += nOffset;
  117. m_nProgressPos = min(m_nProgressPos, m_nProgressUpper);
  118. m_nProgressPos = max(m_nProgressPos, m_nProgressLower);
  119. return nPrevPos;
  120. }
  121. int CXTPReportRecordItemProgress::StepProgressPos()
  122. {
  123. int nPrevPos = m_nProgressPos;
  124. m_nProgressPos += m_nProgressStep;
  125. m_nProgressPos = min(m_nProgressPos, m_nProgressUpper);
  126. m_nProgressPos = max(m_nProgressPos, m_nProgressLower);
  127. return nPrevPos;
  128. }
  129. void CXTPReportRecordItemProgress::OnDrawCaption(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, XTP_REPORTRECORDITEM_METRICS* pMetrics)
  130. {
  131. if(!(pDrawArgs && pMetrics))
  132. return;
  133. // draw text
  134. CXTPReportRecordItemText::OnDrawCaption(pDrawArgs, pMetrics);
  135. // draw progress
  136. int nWidth = min(m_nProgressWidth, pDrawArgs->rcItem.Height());
  137. int nLength = pDrawArgs->rcItem.Width() * m_nProgressPos / (m_nProgressUpper - m_nProgressLower);
  138. pDrawArgs->pDC->FillSolidRect(pDrawArgs->rcItem.left, pDrawArgs->rcItem.top, nLength, nWidth, m_clrProgress);
  139. }