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

对话框与窗口

开发平台:

Visual C++

  1. // XTPPropertyGridItemNumber.cpp : implementation of the CXTPPropertyGridItemNumber class.
  2. //
  3. // This file is a part of the XTREME PROPERTYGRID 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 "Common/XTPVC80Helpers.h"
  22. #include "XTPPropertyGridInplaceEdit.h"
  23. #include "XTPPropertyGridInplaceButton.h"
  24. #include "XTPPropertyGridInplaceList.h"
  25. #include "XTPPropertyGridItem.h"
  26. #include "XTPPropertyGridItemNumber.h"
  27. #ifdef _DEBUG
  28. #define new DEBUG_NEW
  29. #undef THIS_FILE
  30. static char THIS_FILE[] = __FILE__;
  31. #endif
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CXTPPropertyGridItemNumber
  34. IMPLEMENT_DYNAMIC(CXTPPropertyGridItemNumber, CXTPPropertyGridItem)
  35. CXTPPropertyGridItemNumber::CXTPPropertyGridItemNumber(LPCTSTR strCaption, long nValue, long* pBindNumber)
  36. : CXTPPropertyGridItem(strCaption)
  37. {
  38. m_pBindNumber = pBindNumber;
  39. SetNumber(nValue);
  40. m_strDefaultValue = m_strValue;
  41. }
  42. CXTPPropertyGridItemNumber::CXTPPropertyGridItemNumber(UINT nID, long nValue, long* pBindNumber)
  43. : CXTPPropertyGridItem(nID)
  44. {
  45. m_pBindNumber = pBindNumber;
  46. SetNumber(nValue);
  47. m_strDefaultValue = m_strValue;
  48. }
  49. CXTPPropertyGridItemNumber::~CXTPPropertyGridItemNumber()
  50. {
  51. }
  52. /////////////////////////////////////////////////////////////////////////////
  53. //
  54. void CXTPPropertyGridItemNumber::SetValue(CString strValue)
  55. {
  56. SetNumber(_ttol(strValue));
  57. }
  58. void CXTPPropertyGridItemNumber::SetNumber(long nValue)
  59. {
  60. m_nValue = nValue;
  61. if (m_pBindNumber)
  62. {
  63. *m_pBindNumber = m_nValue;
  64. }
  65. CString strValue;
  66. strValue.Format(_T("%i"), nValue);
  67. CXTPPropertyGridItem::SetValue(strValue);
  68. }
  69. void CXTPPropertyGridItemNumber::BindToNumber(long* pBindNumber)
  70. {
  71. m_pBindNumber = pBindNumber;
  72. if (m_pBindNumber)
  73. {
  74. *m_pBindNumber = m_nValue;
  75. }
  76. }
  77. void CXTPPropertyGridItemNumber::OnBeforeInsert()
  78. {
  79. if (m_pBindNumber && *m_pBindNumber != m_nValue)
  80. {
  81. SetNumber(*m_pBindNumber);
  82. }
  83. }
  84. /////////////////////////////////////////////////////////////////////////////
  85. // CXTPPropertyGridItemDouble
  86. IMPLEMENT_DYNAMIC(CXTPPropertyGridItemDouble, CXTPPropertyGridItem)
  87. CXTPPropertyGridItemDouble::CXTPPropertyGridItemDouble(LPCTSTR strCaption, double fValue, LPCTSTR strFormat, double* pBindDouble)
  88. : CXTPPropertyGridItem(strCaption)
  89. {
  90. m_pBindDouble = pBindDouble;
  91. m_strFormat = strFormat;
  92. m_bUseSystemDecimalSymbol = m_strFormat.IsEmpty();
  93. SetDouble(fValue);
  94. m_strDefaultValue = m_strValue;
  95. EnableAutomation();
  96. }
  97. CXTPPropertyGridItemDouble::CXTPPropertyGridItemDouble(UINT nID, double fValue, LPCTSTR strFormat, double* pBindDouble)
  98. : CXTPPropertyGridItem(nID)
  99. {
  100. m_pBindDouble = pBindDouble;
  101. m_strFormat = strFormat;
  102. m_bUseSystemDecimalSymbol = m_strFormat.IsEmpty();
  103. SetDouble(fValue);
  104. m_strDefaultValue = m_strValue;
  105. EnableAutomation();
  106. }
  107. CXTPPropertyGridItemDouble::~CXTPPropertyGridItemDouble()
  108. {
  109. }
  110. /////////////////////////////////////////////////////////////////////////////
  111. //
  112. void CXTPPropertyGridItemDouble::SetValue(CString strValue)
  113. {
  114. SetDouble(StringToDouble(strValue));
  115. }
  116. double CXTPPropertyGridItemDouble::StringToDouble(LPCTSTR strValue)
  117. {
  118. if (m_bUseSystemDecimalSymbol)
  119. {
  120. TRY
  121. {
  122. COleVariant oleString(strValue);
  123. oleString.ChangeType(VT_R8);
  124. return oleString.dblVal;
  125. }
  126. CATCH(COleException, e)
  127. {
  128. }
  129. END_CATCH
  130. }
  131. #ifdef _UNICODE
  132. char astring[20];
  133. WideCharToMultiByte (CP_ACP, 0, strValue, -1, astring, 20, NULL, NULL);
  134. return (double)atof(astring);
  135. #else
  136. return (double)atof(strValue);
  137. #endif
  138. }
  139. CString CXTPPropertyGridItemDouble::DoubleToString(double dValue)
  140. {
  141. if (m_bUseSystemDecimalSymbol)
  142. {
  143. TRY
  144. {
  145. COleVariant oleString(dValue);
  146. oleString.ChangeType(VT_BSTR);
  147. return CString(oleString.bstrVal);
  148. }
  149. CATCH(COleException, e)
  150. {
  151. }
  152. END_CATCH
  153. }
  154. CString strFormat(m_strFormat);
  155. if (strFormat.IsEmpty())
  156. strFormat = _T("%0.2f");
  157. CString strValue;
  158. strValue.Format(m_strFormat, dValue);
  159. return strValue;
  160. }
  161. void CXTPPropertyGridItemDouble::SetDouble(double fValue)
  162. {
  163. m_fValue = fValue;
  164. if (m_pBindDouble)
  165. {
  166. *m_pBindDouble = m_fValue;
  167. }
  168. CXTPPropertyGridItem::SetValue(DoubleToString(fValue));
  169. }
  170. void CXTPPropertyGridItemDouble::BindToDouble(double* pBindNumber)
  171. {
  172. m_pBindDouble = pBindNumber;
  173. if (m_pBindDouble)
  174. {
  175. *m_pBindDouble = m_fValue;
  176. }
  177. }
  178. void CXTPPropertyGridItemDouble::OnBeforeInsert()
  179. {
  180. if (m_pBindDouble && *m_pBindDouble != m_fValue)
  181. {
  182. SetDouble(*m_pBindDouble);
  183. }
  184. }