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

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarViewPart.cpp : implementation file
  2. //
  3. // This file is a part of the XTREME CALENDAR 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/XTPVC50Helpers.h"
  22. #include "Common/XTPVC80Helpers.h"
  23. #include "Common/XTPPropExchange.h"
  24. #include "XTPCalendarViewPart.h"
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #endif
  30. /////////////////////////////////////////////////////////////////////////////
  31. // CXTPCalendarViewPart
  32. CXTPCalendarViewPart::CXTPCalendarViewPart(CXTPCalendarViewPart* pParentPart)
  33. : m_pParentPart(pParentPart)
  34. {
  35. m_pPaintManager = NULL;
  36. }
  37. CXTPCalendarViewPart::~CXTPCalendarViewPart()
  38. {
  39. }
  40. void CXTPCalendarViewPart::RefreshMetrics()
  41. {
  42. }
  43. COLORREF CXTPCalendarViewPart::GetBackgroundColor()
  44. {
  45. CXTPCalendarViewPart* pViewPart = this;
  46. while (pViewPart != NULL)
  47. {
  48. if (!pViewPart->m_clrBackground.IsDefaultValue())
  49. return pViewPart->m_clrBackground;
  50. pViewPart = pViewPart->m_pParentPart;
  51. ASSERT(pViewPart);
  52. };
  53. return 0;
  54. }
  55. COLORREF CXTPCalendarViewPart::GetTextColor()
  56. {
  57. CXTPCalendarViewPart* pViewPart = this;
  58. while (pViewPart != NULL)
  59. {
  60. if (!pViewPart->m_clrTextColor.IsDefaultValue())
  61. return pViewPart->m_clrTextColor;
  62. pViewPart = pViewPart->m_pParentPart;
  63. ASSERT(pViewPart);
  64. };
  65. return 0;
  66. }
  67. CFont& CXTPCalendarViewPart::GetTextFont()
  68. {
  69. CXTPCalendarViewPart* pViewPart = this;
  70. while (pViewPart != NULL)
  71. {
  72. if (!pViewPart->m_fntText.IsDefaultValue())
  73. return pViewPart->m_fntText;
  74. pViewPart = pViewPart->m_pParentPart;
  75. ASSERT(pViewPart);
  76. };
  77. return m_fntText;
  78. }
  79. BOOL AFX_CDECL PX_Font(CXTPPropExchange* pPX, LPCTSTR pcszPropName, LOGFONT& rLogFont)
  80. {
  81. CXTPPropExchangeSection secLF(pPX->GetSection(pcszPropName));
  82. if (pPX->IsLoading())
  83. {
  84. ::ZeroMemory(&rLogFont, sizeof(rLogFont));
  85. }
  86. else
  87. {
  88. secLF->EmptySection();
  89. }
  90. long nVersion = 1;
  91. PX_Long(&secLF, _T("Version"), nVersion, 1);
  92. if (nVersion != 1 && pPX->IsLoading())
  93. {
  94. ASSERT(FALSE);
  95. return FALSE;
  96. }
  97. PX_Long(&secLF, _T("Height"), rLogFont.lfHeight, 0);
  98. PX_Long(&secLF, _T("Width"), rLogFont.lfWidth, 0);
  99. PX_Long(&secLF, _T("Escapement"), rLogFont.lfEscapement, 0);
  100. PX_Long(&secLF, _T("Orientation"), rLogFont.lfOrientation, 0);
  101. PX_Long(&secLF, _T("Weight"), rLogFont.lfWeight, 0);
  102. PX_Byte(&secLF, _T("Italic"), rLogFont.lfItalic, 0);
  103. PX_Byte(&secLF, _T("Underline"), rLogFont.lfUnderline, 0);
  104. PX_Byte(&secLF, _T("StrikeOut"), rLogFont.lfStrikeOut, 0);
  105. PX_Byte(&secLF, _T("CharSet"), rLogFont.lfCharSet, 0);
  106. PX_Byte(&secLF, _T("OutPrecision"), rLogFont.lfOutPrecision, 0);
  107. PX_Byte(&secLF, _T("ClipPrecision"), rLogFont.lfClipPrecision, 0);
  108. PX_Byte(&secLF, _T("Quality"), rLogFont.lfQuality, 0);
  109. PX_Byte(&secLF, _T("PitchAndFamily"), rLogFont.lfPitchAndFamily, 0);
  110. CString strFaceName;
  111. if (pPX->IsStoring())
  112. {
  113. strFaceName = rLogFont.lfFaceName;
  114. PX_String(&secLF, _T("FaceName"), strFaceName);
  115. }
  116. else
  117. {
  118. PX_String(&secLF, _T("FaceName"), strFaceName);
  119. STRCPY_S(rLogFont.lfFaceName, LF_FACESIZE, strFaceName);
  120. }
  121. return TRUE;
  122. }
  123. BOOL AFX_CDECL PX_Font(CXTPPropExchange* pPX, LPCTSTR pcszPropName,
  124.    CXTPCalendarThemeFontValue& refFont)
  125. {
  126. CFont* pFontStandard = refFont.GetStandardValue();
  127. CFont* pFontCustom = refFont.IsCustomValue() ? refFont.GetValue() : NULL;
  128. LOGFONT lfStandard0, lfCustom0;
  129. if (!pFontStandard || !pFontStandard->GetLogFont(&lfStandard0))
  130. {
  131. ::ZeroMemory(&lfStandard0, sizeof(lfStandard0));
  132. }
  133. if (!pFontCustom || !pFontCustom->GetLogFont(&lfCustom0))
  134. {
  135. ::ZeroMemory(&lfCustom0, sizeof(lfCustom0));
  136. }
  137. //-------------------------------------------------------------------
  138. CXTPPropExchangeSection secData(pPX->GetSection(pcszPropName));
  139. if (pPX->IsStoring())
  140. {
  141. secData->EmptySection();
  142. PX_Font(&secData, _T("Standard"), lfStandard0);
  143. PX_Font(&secData, _T("Custom"), lfCustom0);
  144. }
  145. else
  146. {
  147. ASSERT(pPX->IsLoading());
  148. LOGFONT lfStandard, lfCustom;
  149. PX_Font(&secData, _T("Standard"), lfStandard);
  150. PX_Font(&secData, _T("Custom"), lfCustom);
  151. if (memcmp(&lfStandard, &lfStandard0, sizeof(lfStandard)))
  152. {
  153. if ((lfStandard.lfHeight || lfStandard.lfWidth || lfStandard.lfFaceName[0]) )
  154. refFont.SetStandardValue(&lfStandard);
  155. else
  156. refFont.SetStandardValue((CFont*)NULL);
  157. }
  158. if (memcmp(&lfCustom, &lfCustom0, sizeof(lfCustom)))
  159. {
  160. if (lfCustom.lfHeight || lfCustom.lfWidth || lfCustom.lfFaceName[0] )
  161. refFont.SetCustomValue(&lfCustom);
  162. else
  163. refFont.SetDefaultValue();
  164. }
  165. }
  166. return TRUE;
  167. }
  168. BOOL AFX_CDECL PX_Color(CXTPPropExchange* pPX, LPCTSTR pcszPropName, COLORREF& refColor)
  169. {
  170. ASSERT(pPX && pcszPropName);
  171. if (!pPX || !pcszPropName)
  172. return FALSE;
  173. CString strColor;
  174. // save/load color as hex number
  175. if (pPX->IsStoring())
  176. {
  177. if (refColor == COLORREF_NULL)
  178. strColor = _T("-1");
  179. else
  180. strColor.Format(_T("%06X"), refColor);
  181. return PX_String(pPX, pcszPropName, strColor);
  182. }
  183. else
  184. {
  185. PX_String(pPX, pcszPropName, strColor, _T("-1"));
  186. REMOVE_S(strColor, _T(' '));
  187. if (strColor == _T("-1"))
  188. {
  189. refColor = COLORREF_NULL;
  190. }
  191. else
  192. {
  193. TCHAR* pEnd = NULL;
  194. refColor = (COLORREF)_tcstol(strColor, &pEnd, 16);
  195. }
  196. }
  197. return TRUE;
  198. }
  199. BOOL AFX_CDECL PX_Color(CXTPPropExchange* pPX, LPCTSTR pcszPropName, CXTPPaintManagerColor& refColor)
  200. {
  201. class CXTPPaintManagerColor_accesser: public CXTPPaintManagerColor
  202. {
  203. public:
  204. void doPX(CXTPPropExchange* pPX, LPCTSTR pcszPropName)
  205. {
  206. CXTPPropExchangeSection secCLR(pPX->GetSection(pcszPropName));
  207. if (pPX->IsStoring())
  208. secCLR->EmptySection();
  209. PX_Color(&secCLR, _T("Standard"),   m_clrStandardValue);
  210. PX_Color(&secCLR, _T("Custom"),     m_clrCustomValue);
  211. }
  212. };
  213. CXTPPaintManagerColor_accesser* pClrEx = (CXTPPaintManagerColor_accesser*)&refColor;
  214. pClrEx->doPX(pPX, pcszPropName);
  215. return TRUE;
  216. }
  217. BOOL AFX_CDECL PX_GrColor(CXTPPropExchange* pPX, LPCTSTR psczPropName,
  218.  CXTPPaintManagerColorGradient& refGrColor)
  219. {
  220. CXTPPropExchangeSection secData(pPX->GetSection(psczPropName));
  221. if (pPX->IsStoring())
  222. secData->EmptySection();
  223. PX_Color(&secData, _T("LightColor"), refGrColor.clrLight);
  224. PX_Color(&secData, _T("DarkColor"), refGrColor.clrDark);
  225. PX_Float(&secData, _T("GradientFactor"), refGrColor.fGradientFactor, 0.5);
  226. return TRUE;
  227. }
  228. void CXTPCalendarThemeFontValue::Serialize(CArchive& ar)
  229. {
  230. LOGFONT lfStandard0, lfCustom0;
  231. const UINT cnLogFont_size = sizeof(LOGFONT);
  232. if (!m_pValueStandard || !m_pValueStandard->GetLogFont(&lfStandard0))
  233. {
  234. ::ZeroMemory(&lfStandard0, cnLogFont_size);
  235. }
  236. if (!m_pValueCustom || !m_pValueCustom->GetLogFont(&lfCustom0))
  237. {
  238. ::ZeroMemory(&lfCustom0, cnLogFont_size);
  239. }
  240. //-------------------------------------------------------------------
  241. if (ar.IsStoring())
  242. {
  243. ar.Write((void*)&lfStandard0, cnLogFont_size);
  244. ar.Write((void*)&lfCustom0, cnLogFont_size);
  245. }
  246. else
  247. {
  248. ASSERT(ar.IsLoading());
  249. LOGFONT lfStandard, lfCustom;
  250. ar.Read((void*)&lfStandard, cnLogFont_size);
  251. ar.Read((void*)&lfCustom, cnLogFont_size);
  252. if (memcmp(&lfStandard, &lfStandard0, cnLogFont_size))
  253. {
  254. if ((lfStandard.lfHeight || lfStandard.lfWidth || lfStandard.lfFaceName[0]) )
  255. SetStandardValue(&lfStandard);
  256. else
  257. SetStandardValue((CFont*)NULL);
  258. }
  259. if (memcmp(&lfCustom, &lfCustom0, cnLogFont_size))
  260. {
  261. if (lfCustom.lfHeight || lfCustom.lfWidth || lfCustom.lfFaceName[0] )
  262. SetCustomValue(&lfCustom);
  263. else
  264. SetDefaultValue();
  265. }
  266. }
  267. }
  268. /////////////////////////////////////////////////////////////////////////////