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

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarViewPart.h: interface for the CXTPCalendarViewPart class.
  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. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(_XTPCALENDARVIEWPART_H__)
  22. #define _XTPCALENDARVIEWPART_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "Common/XTPColorManager.h"
  28. #include "Common/XTPPropExchange.h"
  29. #pragma warning(disable: 4097)
  30. class CXTPCalendarView;
  31. class CXTPPropExchange;
  32. //===========================================================================
  33. // Summary:
  34. //     Helper class provides functionality to manage font settings for
  35. //     various graphical elements of control.
  36. //===========================================================================
  37. class _XTP_EXT_CLASS CXTPCalendarViewPartFontValue
  38. {
  39. public:
  40. //-----------------------------------------------------------------------
  41. // Summary:
  42. //     Default constructor.
  43. //-----------------------------------------------------------------------
  44. CXTPCalendarViewPartFontValue()
  45. {
  46. }
  47. //-----------------------------------------------------------------------
  48. // Summary:
  49. //     This member function is used to determine if the default font
  50. //     value is set.
  51. // Returns:
  52. //     A BOOL. TRUE if the default value is set. FALSE otherwise.
  53. //-----------------------------------------------------------------------
  54. BOOL IsDefaultValue() {
  55. return (m_fntCustomValue.GetSafeHandle() == NULL) && (m_fntStandardValue.GetSafeHandle() == NULL);
  56. }
  57. //-----------------------------------------------------------------------
  58. // Summary:
  59. //     This member function is used to set the value for the standard
  60. //     font.
  61. // Parameters:
  62. //     pLogFont - A pointer to a LOGFONT structure that contains the
  63. //                standard font value.
  64. // Remarks:
  65. //     Call this member function to set the standard font. This font
  66. //     is used as the default font if there is not a custom font value
  67. //     set.
  68. //-----------------------------------------------------------------------
  69. void SetStandardValue(LOGFONT* pLogFont)
  70. {
  71. m_fntStandardValue.DeleteObject();
  72. m_fntStandardValue.CreateFontIndirect(pLogFont);
  73. }
  74. //-----------------------------------------------------------------------
  75. // Summary:
  76. //     This member function is used to delete the custom font and to
  77. //     set the default font value as the default font.
  78. // Remarks:
  79. //     Call this member function to ensure that the default font is
  80. //     used and not the custom font.
  81. //-----------------------------------------------------------------------
  82. void SetDefaultValue() {
  83. m_fntCustomValue.DeleteObject();
  84. }
  85. //-----------------------------------------------------------------------
  86. // Summary:
  87. //     This member function is use to overload the function call operator
  88. //     for the CXTPCalendarViewPartFontValue class.
  89. // Remarks:
  90. //     Use the default font if the custom font does not work. Otherwise,
  91. //     use a custom font.
  92. // Returns:
  93. //     A reference to a CFont object that contains either the standard
  94. //     font value or the custom font value.
  95. //-----------------------------------------------------------------------
  96. operator CFont& () {
  97. return  (m_fntCustomValue.GetSafeHandle() == 0) ? m_fntStandardValue : m_fntCustomValue;
  98. }
  99. //-----------------------------------------------------------------------
  100. // Summary:
  101. //     This member function is use to overload the function call operator
  102. //     for the CXTPCalendarViewPartFontValue class.
  103. // Remarks:
  104. //     Use the default font if the custom font does not work. Otherwise,
  105. //     use a custom font.
  106. // Returns:
  107. //     A pointer to a CFont object that contains either the standard
  108. //     font value or the custom font value.
  109. //-----------------------------------------------------------------------
  110. operator CFont* () {
  111. return  (m_fntCustomValue.GetSafeHandle() == 0) ? &m_fntStandardValue : &m_fntCustomValue;
  112. }
  113. //-----------------------------------------------------------------------
  114. // Summary:
  115. //     This member function overloads the assignment operator for the
  116. //     CXTPCalendarViewPartFontValue class.
  117. // Parameters:
  118. //     pLogFont - A pointer to a LOGFONT structure.
  119. // Remarks:
  120. //     Creates a new custom font.
  121. // Returns:
  122. //     A reference to a CXTPCalendarViewPartFontValue.
  123. //-----------------------------------------------------------------------
  124. const CXTPCalendarViewPartFontValue& operator=(LOGFONT* pLogFont) {
  125. m_fntCustomValue.DeleteObject();
  126. if (pLogFont) m_fntCustomValue.CreateFontIndirect(pLogFont);
  127. return *this;
  128. }
  129. //-----------------------------------------------------------------------
  130. // Summary:
  131. //     Get a current value object.
  132. // Returns:
  133. //     Pointer to the current value object.
  134. //-----------------------------------------------------------------------
  135. CFont* operator->() {
  136. return (m_fntCustomValue.GetSafeHandle() == 0) ? &m_fntStandardValue : &m_fntCustomValue;
  137. };
  138. protected:
  139. CFont m_fntStandardValue;   // Stores default font.
  140. CFont m_fntCustomValue;     // Stores custom font.
  141. };
  142. //===========================================================================
  143. // Summary:
  144. //      Helper class template provides functionality to manage customized
  145. //      value for the specified type.
  146. //===========================================================================
  147. template<class _TValue, class _TValueRef = _TValue&>
  148. class CXTPCalendarThemeCustomizableXValueT
  149. {
  150. public:
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     Default object constructor.
  154. //-----------------------------------------------------------------------
  155. CXTPCalendarThemeCustomizableXValueT()
  156. {
  157. m_bIsStandardSet = FALSE;
  158. m_bIsCustomSet = FALSE;
  159. m_bAutoDestroy_Standard = FALSE;
  160. m_bAutoDestroy_Custom = FALSE;
  161. m_ValueStandard = _TValue();
  162. m_ValueCustom = _TValue();
  163. }
  164. //-----------------------------------------------------------------------
  165. // Summary:
  166. //     Default object destructor.
  167. //-----------------------------------------------------------------------
  168. virtual ~CXTPCalendarThemeCustomizableXValueT()
  169. {
  170. if (m_bAutoDestroy_Standard) {
  171. DoDestroy(m_ValueStandard);
  172. }
  173. if (m_bAutoDestroy_Custom) {
  174. DoDestroy(m_ValueCustom);
  175. }
  176. }
  177. //-----------------------------------------------------------------------
  178. // Summary:
  179. //     This member function is used to destroy objects of type _TValue if
  180. //     necessary (Close handles, free memory, ...).
  181. // Parameters:
  182. //      refValue - An object reference to destroy.
  183. //-----------------------------------------------------------------------
  184. virtual void DoDestroy(_TValue& refValue){UNREFERENCED_PARAMETER(refValue);};
  185. //-----------------------------------------------------------------------
  186. // Summary:
  187. //     This member function is used to determine if the default value is set.
  188. // Returns:
  189. //     A BOOL. TRUE if the default value is set. FALSE otherwise.
  190. //-----------------------------------------------------------------------
  191. virtual BOOL IsDefaultValue() const {
  192. return !m_bIsCustomSet && !m_bIsStandardSet;
  193. }
  194. //-----------------------------------------------------------------------
  195. // Summary:
  196. //     This member function determines if the standard value is set and
  197. //     used.
  198. // Returns:
  199. //     TRUE if standard value is set and custom value is not set,
  200. //     otherwise FALSE.
  201. //-----------------------------------------------------------------------
  202. virtual BOOL IsStandardValue() const {
  203. return !m_bIsCustomSet && m_bIsStandardSet;
  204. }
  205. //-----------------------------------------------------------------------
  206. // Summary:
  207. //     This member function determines if the custom value is set and
  208. //     used.
  209. // Returns:
  210. //     TRUE if custom value is set, otherwise FALSE.
  211. //-----------------------------------------------------------------------
  212. virtual BOOL IsCustomValue() const {
  213. return m_bIsCustomSet;
  214. }
  215. //-----------------------------------------------------------------------
  216. // Summary:
  217. //      This member function is used to set the standard value.
  218. // Parameters:
  219. //      refValue    - A standard value.
  220. //      bAutoDestroy - This parameter indicates should be a value object
  221. //                    destroyed when destroy or other value is set.
  222. //                    If TRUE - DoDestroy will be called.
  223. // Remarks:
  224. //     Call this member function to set the standard value. This value
  225. //     is used as the default value if there is not a custom value set.
  226. // See Also:
  227. //      SetCustomValue, SetDefaultValue
  228. //-----------------------------------------------------------------------
  229. virtual void SetStandardValue(_TValueRef refValue, BOOL bAutoDestroy)
  230. {
  231. if (m_bIsStandardSet && m_bAutoDestroy_Standard) {
  232. DoDestroy(m_ValueStandard);
  233. }
  234. m_ValueStandard = refValue;
  235. m_bAutoDestroy_Standard = bAutoDestroy;
  236. m_bIsStandardSet = TRUE;
  237. }
  238. //<COMBINE CXTPCalendarThemeCustomizableXValueT::SetStandardValue@_TValueRef@BOOL>
  239. virtual void SetStandardValue(_TValueRef refValue)
  240. {
  241. SetStandardValue(refValue, m_bAutoDestroy_Standard);
  242. }
  243. //-----------------------------------------------------------------------
  244. // Summary:
  245. //      This member function is used to set the custom value.
  246. // Parameters:
  247. //      refValue    - A custom value.
  248. //      bAutoDestroy - This parameter indicates should be a value object
  249. //                    destroyed when destroy or other value is set.
  250. //                    If TRUE - DoDestroy will be called.
  251. // Remarks:
  252. //     Call this member function to set the custom value. If set, this value
  253. //     is used instead of default value.
  254. // See Also:
  255. //      SetStandardValue, SetDefaultValue
  256. //-----------------------------------------------------------------------
  257. virtual void SetCustomValue(_TValueRef refValue, BOOL bAutoDestroy)
  258. {
  259. if (m_bIsCustomSet && m_bAutoDestroy_Custom) {
  260. DoDestroy(m_ValueCustom);
  261. }
  262. m_ValueCustom = refValue;
  263. m_bAutoDestroy_Custom = bAutoDestroy;
  264. m_bIsCustomSet = TRUE;
  265. }
  266. //<COMBINE CXTPCalendarThemeCustomizableXValueT::SetCustomValue@_TValueRef@BOOL>
  267. virtual void SetCustomValue(_TValueRef refValue)
  268. {
  269. SetCustomValue(refValue, m_bAutoDestroy_Custom);
  270. }
  271. //-----------------------------------------------------------------------
  272. // Summary:
  273. //      This member function is used to reset the custom value.
  274. // Remarks:
  275. //      Call this member function to ensure that the default value is
  276. //      used and not the custom value.
  277. //      If the default value is not set - method do nothing.
  278. // See Also:
  279. //      SetStandardValue, SetCustomValue
  280. //-----------------------------------------------------------------------
  281. virtual void SetDefaultValue()
  282. {
  283. if (m_bIsStandardSet)
  284. {
  285. if (m_bIsCustomSet && m_bAutoDestroy_Custom) {
  286. DoDestroy(m_ValueCustom);
  287. }
  288. m_bIsCustomSet = FALSE;
  289. m_bAutoDestroy_Custom = FALSE;
  290. }
  291. }
  292. //-----------------------------------------------------------------------
  293. // Summary:
  294. //     This member function is use to get current value.
  295. // Remarks:
  296. //     The default value is used if the custom value is not set. Otherwise,
  297. //     a custom value is used.
  298. // Returns:
  299. //     Current value as _TValueRef.
  300. // See Also:
  301. //      SetStandardValue, SetCustomValue, SetDefaultValue
  302. //-----------------------------------------------------------------------
  303. virtual _TValueRef GetValue() const {
  304. return  m_bIsCustomSet ? m_ValueCustom : m_ValueStandard;
  305. }
  306. //-----------------------------------------------------------------------
  307. // Summary:
  308. //     This member function is use to get current value.
  309. // Remarks:
  310. //     The default value is used if the custom value is not set. Otherwise,
  311. //     a custom value is used.
  312. // Returns:
  313. //     Current value as const _TValue&.
  314. // See Also:
  315. //      SetStandardValue, SetCustomValue, SetDefaultValue
  316. //-----------------------------------------------------------------------
  317. virtual const _TValue& GetValueX() const {
  318. return  m_bIsCustomSet ? m_ValueCustom : m_ValueStandard;
  319. }
  320. //-----------------------------------------------------------------------
  321. // Summary:
  322. //     This member function is use to get standard value.
  323. // Returns:
  324. //     Standard value.
  325. // See Also:
  326. //      SetStandardValue, SetCustomValue, SetDefaultValue
  327. //-----------------------------------------------------------------------
  328. virtual _TValueRef GetStandardValue() const {
  329. return  m_ValueStandard;
  330. }
  331. //-----------------------------------------------------------------------
  332. // Summary:
  333. //     This member operator is use to get current value.
  334. // Remarks:
  335. //     The default value is used if the custom value is not set. Otherwise,
  336. //     a custom value is used.
  337. // Returns:
  338. //     Current value.
  339. // See Also:
  340. //      SetStandardValue, SetCustomValue, SetDefaultValue, GetValue
  341. //-----------------------------------------------------------------------
  342. operator _TValueRef () const {
  343. return GetValue();
  344. }
  345. //-----------------------------------------------------------------------
  346. // Summary:
  347. //     This member function is use to set standard value using current value
  348. //     from the specified object.
  349. // Parameters:
  350. //     refSrc - Reference to a source object.
  351. // See Also:
  352. //      SetStandardValue, SetCustomValue, SetDefaultValue, GetValue,
  353. //      IsStandardValue, IsCustomValue, GetStandardValue.
  354. //-----------------------------------------------------------------------
  355. void CopySettings(const CXTPCalendarThemeCustomizableXValueT<_TValue, _TValueRef>& refSrc)
  356. {
  357. SetStandardValue(refSrc.GetValue());
  358. }
  359. //-----------------------------------------------------------------------
  360. // Summary:
  361. //     This member operator is use to set custom value.
  362. // Parameters:
  363. //      refValue    - A new custom value.
  364. // Returns:
  365. //      Reference to this object.
  366. //-----------------------------------------------------------------------
  367. const CXTPCalendarThemeCustomizableXValueT<_TValue, _TValueRef>& operator=(_TValueRef refValue) {
  368. SetCustomValue(refValue);
  369. return *this;
  370. }
  371. //-----------------------------------------------------------------------
  372. // Summary:
  373. //     This method reads or writes data from or to an archive.
  374. // Parameters:
  375. //     ar - A CArchive object to serialize to or from.
  376. // See Also: DoPropExchange()
  377. //-----------------------------------------------------------------------
  378. virtual void Serialize(CArchive& ar)
  379. {
  380. // for simple types which can be easy serialized.
  381. // override for more complex cases
  382. if (ar.IsStoring())
  383. {
  384. ar << m_bIsStandardSet;
  385. ar << m_bIsCustomSet;
  386. ar << m_ValueStandard;
  387. ar << m_ValueCustom;
  388. }
  389. else
  390. {
  391. ASSERT(ar.IsLoading());
  392. ar >> m_bIsStandardSet;
  393. ar >> m_bIsCustomSet;
  394. ar >> m_ValueStandard;
  395. ar >> m_ValueCustom;
  396. }
  397. }
  398. //-----------------------------------------------------------------------
  399. // Summary:
  400. //     This method reads or writes data from or to an storage.
  401. // Parameters:
  402. //     pPX - A CXTPPropExchange object to serialize to or from.
  403. //     pcszPropName - The name of the property being exchanged.
  404. // See Also: Serialize(), DoPX_Value()
  405. //-----------------------------------------------------------------------
  406. virtual void DoPropExchange(CXTPPropExchange* pPX, LPCTSTR pcszPropName)
  407. {
  408. if (!pPX || !pcszPropName)
  409. {
  410. ASSERT(FALSE);
  411. return;
  412. }
  413. CXTPPropExchangeSection secData(pPX->GetSection(pcszPropName));
  414. if (pPX->IsStoring())
  415. secData->EmptySection();
  416. PX_Bool(&secData, _T("IsStandardSet"), m_bIsStandardSet);
  417. PX_Bool(&secData, _T("IsCustomSet"), m_bIsCustomSet);
  418. DoPX_Value(&secData, _T("Standard"), m_ValueStandard, TRUE);
  419. DoPX_Value(&secData, _T("Custom"), m_ValueCustom, FALSE);
  420. }
  421. protected:
  422. //-----------------------------------------------------------------------
  423. // Summary:
  424. //     This method reads or writes value data from or to an storage.
  425. // Parameters:
  426. //     pPX          - A CXTPPropExchange object to serialize to or from.
  427. //     pcszPropName - A value name.
  428. //     rXValue      - Reference to value.
  429. //     bStandard    - Standard or Custom value.
  430. // See Also: DoPropExchange()
  431. //-----------------------------------------------------------------------
  432. virtual void DoPX_Value(CXTPPropExchange* pPX, LPCTSTR pcszPropName, _TValue& rXValue, BOOL bStandard)
  433. {
  434. ASSERT(FALSE);
  435. UNREFERENCED_PARAMETER(pPX); UNREFERENCED_PARAMETER(pcszPropName); UNREFERENCED_PARAMETER(rXValue);
  436. UNREFERENCED_PARAMETER(bStandard);
  437. }
  438. protected:
  439. _TValue m_ValueStandard;            // Stores default value.
  440. BOOL    m_bAutoDestroy_Standard;    // Call DoDestroy for standard vale.
  441. BOOL    m_bIsStandardSet;           // Is standard value set.
  442. _TValue m_ValueCustom;              // Stores custom value.
  443. BOOL    m_bAutoDestroy_Custom;      // Call DoDestroy for custom vale.
  444. BOOL    m_bIsCustomSet;             // Is custom value set.
  445. };
  446. //===========================================================================
  447. // Summary:
  448. //      Helper class template provides functionality to manage customized
  449. //      value for the specified class objects.
  450. //===========================================================================
  451. template<class _TValue>
  452. class CXTPCalendarViewPartCustomizableValueT
  453. {
  454. public:
  455. //-----------------------------------------------------------------------
  456. // Summary:
  457. //     Default object constructor.
  458. //-----------------------------------------------------------------------
  459. CXTPCalendarViewPartCustomizableValueT()
  460. {
  461. m_pValueStandard = NULL;
  462. m_bAutoDelete_Standard = FALSE;
  463. m_pValueCustom = NULL;
  464. m_bAutoDelete_Custom = FALSE;
  465. }
  466. //-----------------------------------------------------------------------
  467. // Summary:
  468. //     Default object destructor.
  469. //-----------------------------------------------------------------------
  470. virtual ~CXTPCalendarViewPartCustomizableValueT()
  471. {
  472. if (m_bAutoDelete_Standard) {
  473. SAFE_DELETE(m_pValueStandard);
  474. }
  475. if (m_bAutoDelete_Custom) {
  476. SAFE_DELETE(m_pValueCustom);
  477. }
  478. }
  479. //-----------------------------------------------------------------------
  480. // Summary:
  481. //     This member function is used to determine if the default value is set.
  482. // Returns:
  483. //     A BOOL. TRUE if the default value is set. FALSE otherwise.
  484. //-----------------------------------------------------------------------
  485. virtual BOOL IsDefaultValue() const {
  486. return (m_pValueCustom == NULL) && (m_pValueStandard == NULL);
  487. }
  488. //-----------------------------------------------------------------------
  489. // Summary:
  490. //     This member function determines if the standard value is set and
  491. //     used.
  492. // Returns:
  493. //     TRUE if standard value is set and custom value is not set,
  494. //     otherwise FALSE.
  495. //-----------------------------------------------------------------------
  496. virtual BOOL IsStandardValue() const {
  497. return (m_pValueCustom == NULL) && (m_pValueStandard != NULL);
  498. }
  499. //-----------------------------------------------------------------------
  500. // Summary:
  501. //     This member function determines if the custom value is set and
  502. //     used.
  503. // Returns:
  504. //     TRUE if custom value is set, otherwise FALSE.
  505. //-----------------------------------------------------------------------
  506. virtual BOOL IsCustomValue() const {
  507. return m_pValueCustom != NULL;
  508. }
  509. //-----------------------------------------------------------------------
  510. // Summary:
  511. //      This member function is used to set the standard value.
  512. // Parameters:
  513. //      pValue      - A pointer to a value object.
  514. //      bAutoDelete - This parameter indicates should be a value object
  515. //                    deleted when destroy or other value is set.
  516. //                    If TRUE - value object will be deleted automatically.
  517. // Remarks:
  518. //     Call this member function to set the standard value. This value
  519. //     is used as the default value if there is not a custom value set.
  520. // Example:
  521. //      See example for SetCustomValue.
  522. // See Also:
  523. //      SetCustomValue, SetDefaultValue
  524. //-----------------------------------------------------------------------
  525. virtual void SetStandardValue(_TValue* pValue, BOOL bAutoDelete)
  526. {
  527. if (m_bAutoDelete_Standard) {
  528. SAFE_DELETE(m_pValueStandard);
  529. }
  530. m_pValueStandard = pValue;
  531. m_bAutoDelete_Standard = bAutoDelete;
  532. }
  533. //-----------------------------------------------------------------------
  534. // Summary:
  535. //      This member function is used to set the custom value.
  536. // Parameters:
  537. //      pValue      - A pointer to a value object.
  538. //      bAutoDelete - This parameter indicates should be a value object
  539. //                    deleted when destroy or other value is set.
  540. //                    If TRUE - value object will be deleted automatically.
  541. // Remarks:
  542. //     Call this member function to set the custom value. If set, this value
  543. //     is used instead of default value.
  544. // Example:
  545. // <code>
  546. //      class CMyClass
  547. //      {
  548. //      public:
  549. //          CMyClass();
  550. //
  551. //          void Draw(CDC* pDC, CRect& rcRect, BOOL bCustom);
  552. //          // ...
  553. //          CBrush m_brushBusy_Custom;
  554. //
  555. //          CXTPCalendarViewPartBrushValue m_brushVal_auto;
  556. //          CXTPCalendarViewPartBrushValue m_brushVal_static;
  557. //      };
  558. //
  559. //      CMyClass::CMyClass()
  560. //      {
  561. //          m_brushBusy_Custom.CreateSolidBrush(RGB(0, 0, 0xFF));
  562. //
  563. //          m_brushVal_auto.SetStandardValue(new CBrush(RGB(0xFF, 0xFF, 0xFF)), TRUE);
  564. //          m_brushVal_static.SetStandardValue(&m_brushBusy_Custom, FALSE);
  565. //      }
  566. //
  567. //      void CMyClass::Draw(CDC* pDC, CRect& rcRect, BOOL bCustom)
  568. //      {
  569. //          if (bCustom) {
  570. //              m_brushVal_auto.SetCustomValue(new CBrush(RGB(0, 0, 0)), TRUE);
  571. //              m_brushVal_static.SetCustomValue(new CBrush(RGB(255, 255, 255)), TRUE);
  572. //          }
  573. //          else {
  574. //              // Reset to standard value
  575. //              m_brushVal_auto.SetDefaultValue();
  576. //              m_brushVal_static.SetDefaultValue();
  577. //          }
  578. //
  579. //          pDC->FillRect(&rcRect, (CBrush*)m_brushVal_auto);
  580. //
  581. //          CBrush* pBrushOld = pDC->SelectObject(m_brushVal_static.GetValue());
  582. //          // ....
  583. //          pDC->SelectObject(pBrushOld);
  584. //      }
  585. //
  586. // </code>
  587. // See Also:
  588. //      SetStandardValue, SetDefaultValue
  589. //-----------------------------------------------------------------------
  590. virtual void SetCustomValue(_TValue* pValue, BOOL bAutoDelete)
  591. {
  592. if (m_bAutoDelete_Custom) {
  593. SAFE_DELETE(m_pValueCustom);
  594. }
  595. m_pValueCustom = pValue;
  596. m_bAutoDelete_Custom = bAutoDelete;
  597. }
  598. //-----------------------------------------------------------------------
  599. // Summary:
  600. //      This member function is used to reset the custom value.
  601. // Remarks:
  602. //      Call this member function to ensure that the default value is
  603. //      used and not the custom value.
  604. //      If the default value is not set - method do nothing.
  605. // Example:
  606. //      See example for SetCustomValue.
  607. // See Also:
  608. //      SetStandardValue, SetCustomValue
  609. //-----------------------------------------------------------------------
  610. virtual void SetDefaultValue()
  611. {
  612. if (m_pValueStandard)
  613. {
  614. if (m_bAutoDelete_Custom) {
  615. SAFE_DELETE(m_pValueCustom);
  616. }
  617. m_pValueCustom = NULL;
  618. }
  619. }
  620. //-----------------------------------------------------------------------
  621. // Summary:
  622. //     This member function is use to get current value.
  623. // Remarks:
  624. //     The default value is used if the custom value is not set. Otherwise,
  625. //     a custom value is used.
  626. // Returns:
  627. //     A pointer to the current value.
  628. // Example:
  629. //      See example for SetCustomValue.
  630. // See Also:
  631. //      SetStandardValue, SetCustomValue, SetDefaultValue, operator _TValue*
  632. //-----------------------------------------------------------------------
  633. virtual _TValue* GetValue() const {
  634. return  m_pValueCustom ? m_pValueCustom : m_pValueStandard;
  635. }
  636. //-----------------------------------------------------------------------
  637. // Summary:
  638. //     This member function is use to get standard value.
  639. // Returns:
  640. //     A pointer to the standard value.
  641. // Example:
  642. //      See example for SetCustomValue.
  643. // See Also:
  644. //      SetStandardValue, SetCustomValue, SetDefaultValue, operator _TValue*
  645. //-----------------------------------------------------------------------
  646. virtual _TValue* GetStandardValue() const {
  647. return  m_pValueStandard;
  648. }
  649. //-----------------------------------------------------------------------
  650. // Summary:
  651. //     This member operator is use to get current value.
  652. // Remarks:
  653. //     The default value is used if the custom value is not set. Otherwise,
  654. //     a custom value is used.
  655. // Returns:
  656. //     A pointer to the current value.
  657. // Example:
  658. //      See example for SetCustomValue.
  659. // See Also:
  660. //      SetStandardValue, SetCustomValue, SetDefaultValue, GetValue
  661. //-----------------------------------------------------------------------
  662. operator _TValue* () const {
  663. return GetValue();
  664. }
  665. //-----------------------------------------------------------------------
  666. // Summary:
  667. //     Get a current value object.
  668. // Returns:
  669. //     Pointer to the current value object.
  670. //-----------------------------------------------------------------------
  671. _TValue* operator->() {
  672. return GetValue();
  673. };
  674. //-----------------------------------------------------------------------
  675. // Summary:
  676. //     This member function is use to set standard value using current value
  677. //     from the specified object.
  678. // Parameters:
  679. //     refSrc - Reference to a source object.
  680. // See Also:
  681. //      SetStandardValue, SetCustomValue, SetDefaultValue, GetValue,
  682. //      IsStandardValue, IsCustomValue, GetStandardValue.
  683. //-----------------------------------------------------------------------
  684. void CopySettings(const CXTPCalendarViewPartCustomizableValueT<_TValue>& refSrc)
  685. {
  686. SetStandardValue(refSrc.GetValue(), FALSE);
  687. }
  688. protected:
  689. _TValue* m_pValueStandard;      // Stores default value.
  690. BOOL    m_bAutoDelete_Standard; // Call operator delete for the standard value.
  691. _TValue* m_pValueCustom;        // Stores custom value.
  692. BOOL    m_bAutoDelete_Custom;   // Call operator delete for the custom value.
  693. };
  694. //===========================================================================
  695. // Summary:
  696. //     Helper class provides functionality to manage brush value objects.
  697. //===========================================================================
  698. class _XTP_EXT_CLASS CXTPCalendarViewPartBrushValue : public
  699. CXTPCalendarViewPartCustomizableValueT<CBrush>
  700. {
  701. };
  702. //===========================================================================
  703. // Summary:
  704. //     Helper class provides functionality to manage font value objects.
  705. //===========================================================================
  706. class _XTP_EXT_CLASS CXTPCalendarThemeFontValue : public
  707. CXTPCalendarViewPartCustomizableValueT<CFont>
  708. {
  709. //{{AFX_CODEJOCK_PRIVATE
  710. typedef CXTPCalendarViewPartCustomizableValueT<CFont> TBase;
  711. //}}AFX_CODEJOCK_PRIVATE
  712. public:
  713. //-----------------------------------------------------------------------
  714. // Summary:
  715. //     Default constructor.
  716. //-----------------------------------------------------------------------
  717. CXTPCalendarThemeFontValue()
  718. {
  719. }
  720. //-----------------------------------------------------------------------
  721. // Summary:
  722. //     This member function is used to set the value for the standard
  723. //     font.
  724. // Parameters:
  725. //     pLogFont - A pointer to a LOGFONT structure that contains the
  726. //                standard font value.
  727. // Remarks:
  728. //     Call this member function to set the standard font. This font
  729. //     is used as the default font if there is not a custom font value
  730. //     set.
  731. //-----------------------------------------------------------------------
  732. virtual void SetStandardValue(LOGFONT* pLogFont)
  733. {
  734. CFont* pFont = new CFont();
  735. if (pFont) {
  736. VERIFY(pFont->CreateFontIndirect(pLogFont));
  737. }
  738. TBase::SetStandardValue(pFont, TRUE);
  739. }
  740. //-----------------------------------------------------------------------
  741. // Summary:
  742. //     This member function is used to set the value for the custom
  743. //     font.
  744. // Parameters:
  745. //     pLogFont - A pointer to a LOGFONT structure that contains the
  746. //                custom font value.
  747. //     pFont    - A pointer to CFont object.
  748. // Remarks:
  749. //     Call this member function to set the custom font.
  750. //     If set, this font is used as the object value.
  751. //-----------------------------------------------------------------------
  752. virtual void SetCustomValue(LOGFONT* pLogFont)
  753. {
  754. CFont* pFont = new CFont();
  755. if (pFont) {
  756. VERIFY(pFont->CreateFontIndirect(pLogFont));
  757. }
  758. TBase::SetCustomValue(pFont, TRUE);
  759. }
  760. //<COMBINE CXTPCalendarViewPartCustomizableValueT::SetStandardValue>
  761. virtual void SetStandardValue(CFont* pFont)
  762. {
  763. //may be not safe when few CXTPCalendarThemeFontValue objects use the same CFont* pointer.
  764. //
  765. //TBase::SetStandardValue(pFont, FALSE);
  766. if (!pFont)
  767. {
  768. TBase::SetStandardValue(pFont, FALSE);
  769. return;
  770. }
  771. LOGFONT lfFont;
  772. int nRes = pFont->GetLogFont(&lfFont);
  773. ASSERT(nRes);
  774. if(nRes)
  775. SetStandardValue(&lfFont);
  776. }
  777. // <COMBINE CXTPCalendarViewPartCustomizableValueT::SetCustomValue>
  778. virtual void SetCustomValue(CFont* pFont)
  779. {
  780. //may be not safe when few CXTPCalendarThemeFontValue objects use the same CFont* pointer.
  781. //
  782. //TBase::SetCustomValue(pFont, FALSE);
  783. if (!pFont)
  784. {
  785. TBase::SetStandardValue(pFont, FALSE);
  786. return;
  787. }
  788. LOGFONT lfFont;
  789. int nRes = pFont->GetLogFont(&lfFont);
  790. ASSERT(nRes);
  791. if(nRes)
  792. SetCustomValue(&lfFont);
  793. }
  794. //-----------------------------------------------------------------------
  795. // Summary:
  796. //     This member function overloads the assignment operator for the
  797. //     CXTPCalendarViewPartFontValue class.
  798. // Parameters:
  799. //     rLogFont - A reference to LOGFONT structure.
  800. // Remarks:
  801. //     Creates a new custom font.
  802. // Returns:
  803. //     A reference to a CXTPCalendarViewPartFontValue.
  804. //-----------------------------------------------------------------------
  805. const CXTPCalendarThemeFontValue& operator=(LOGFONT& rLogFont) {
  806. SetCustomValue(&rLogFont);
  807. return *this;
  808. }
  809. //-----------------------------------------------------------------------
  810. // Summary:
  811. //     This member function is use to set standard value using current value
  812. //     from the specified object.
  813. // Parameters:
  814. //     refSrc - Reference to a source object.
  815. // See Also:
  816. //      SetStandardValue, SetCustomValue, SetDefaultValue, GetValue,
  817. //      IsStandardValue, IsCustomValue, GetStandardValue.
  818. //-----------------------------------------------------------------------
  819. void CopySettings(const CXTPCalendarThemeFontValue& refSrc)
  820. {
  821. SetStandardValue(refSrc.GetValue());
  822. }
  823. //-----------------------------------------------------------------------
  824. // Summary:
  825. //     This method reads or writes data from or to an archive.
  826. // Parameters:
  827. //     ar - A CArchive object to serialize to or from.
  828. // See Also: DoPropExchange()
  829. //-----------------------------------------------------------------------
  830. virtual void Serialize(CArchive& ar);
  831. };
  832. //===========================================================================
  833. // Summary:
  834. //     Helper class provides functionality to manage customized string value
  835. //     objects.
  836. //===========================================================================
  837. class _XTP_EXT_CLASS CXTPCalendarThemeStringValue : public
  838. CXTPCalendarThemeCustomizableXValueT<CString, LPCTSTR>
  839. {
  840. public:
  841. //-----------------------------------------------------------------------
  842. // Summary:
  843. //     Default constructor.
  844. //-----------------------------------------------------------------------
  845. CXTPCalendarThemeStringValue()
  846. {
  847. m_bAutoDestroy_Standard = m_bAutoDestroy_Custom = TRUE;
  848. }
  849. //-----------------------------------------------------------------------
  850. // Summary:
  851. //     This member operator is use to get current value.
  852. // Remarks:
  853. //     The default value is used if the custom value is not set. Otherwise,
  854. //     a custom value is used.
  855. // Returns:
  856. //     A pointer to the current value.
  857. // Example:
  858. //      See example for SetCustomValue.
  859. // See Also:
  860. //      SetStandardValue, SetCustomValue, SetDefaultValue, GetValue
  861. //-----------------------------------------------------------------------
  862. operator const CString&() const {
  863. return GetValueX();
  864. }
  865. //-----------------------------------------------------------------------
  866. // Summary:
  867. //     This member operator is use to set custom value.
  868. // Parameters:
  869. //      pcszValue    - A new custom value.
  870. // Returns:
  871. //      Reference to this object.
  872. //-----------------------------------------------------------------------
  873. const CXTPCalendarThemeStringValue& operator=(LPCTSTR pcszValue) {
  874. SetCustomValue(pcszValue);
  875. return *this;
  876. }
  877. protected:
  878. //-----------------------------------------------------------------------
  879. // Summary:
  880. //     This member operator is use to destroy/clear value dada.
  881. // Parameters:
  882. //      refValue - A value reference to destroy/clear data.
  883. //-----------------------------------------------------------------------
  884. virtual void DoDestroy(CString& refValue) {
  885. refValue.Empty();
  886. };
  887. //-----------------------------------------------------------------------
  888. // Summary:
  889. //     This method reads or writes value data from or to an storage.
  890. // Parameters:
  891. //     pPX          - A CXTPPropExchange object to serialize to or from.
  892. //     pcszPropName - A value name.
  893. //     rXValue      - Reference to value.
  894. //     bStandard    - Standard or Custom value.
  895. // See Also: DoPropExchange()
  896. //-----------------------------------------------------------------------
  897. virtual void DoPX_Value(CXTPPropExchange* pPX, LPCTSTR pcszPropName, CString& rXValue, BOOL bStandard)
  898. {
  899. if (pPX->IsStoring())
  900. {
  901. if (bStandard && !m_bIsStandardSet ||
  902. !bStandard && !m_bIsCustomSet)
  903. {
  904. rXValue.Empty();
  905. }
  906. }
  907. PX_String(pPX, pcszPropName, rXValue);
  908. }
  909. };
  910. //===========================================================================
  911. // Summary:
  912. //     Helper class provides functionality to manage customized int value
  913. //     objects.
  914. //===========================================================================
  915. class _XTP_EXT_CLASS CXTPCalendarThemeIntValue : public CXTPCalendarThemeCustomizableXValueT<int, int>
  916. {
  917. public:
  918. //-----------------------------------------------------------------------
  919. // Summary:
  920. //     Default object constructor.
  921. //-----------------------------------------------------------------------
  922. CXTPCalendarThemeIntValue()
  923. {
  924. m_ValueStandard = m_ValueCustom = 0;
  925. }
  926. //-----------------------------------------------------------------------
  927. // Summary:
  928. //     This method reads or writes value data from or to an storage.
  929. // Parameters:
  930. //     pPX          - A CXTPPropExchange object to serialize to or from.
  931. //     pcszPropName - A value name.
  932. //     rXValue      - Reference to value.
  933. //     bStandard    - Standard or Custom value.
  934. // See Also: DoPropExchange()
  935. //-----------------------------------------------------------------------
  936. virtual void DoPX_Value(CXTPPropExchange* pPX, LPCTSTR pcszPropName, int& rXValue, BOOL bStandard) {
  937. if (pPX->IsStoring())
  938. {
  939. if (bStandard && !m_bIsStandardSet ||
  940. !bStandard && !m_bIsCustomSet)
  941. {
  942. rXValue = 0;
  943. }
  944. }
  945. PX_Int(pPX, pcszPropName, rXValue);
  946. }
  947. //-----------------------------------------------------------------------
  948. // Summary:
  949. //     This member operator is use to set custom value.
  950. // Parameters:
  951. //      nValue    - A new custom value.
  952. // Returns:
  953. //      Reference to this object.
  954. //-----------------------------------------------------------------------
  955. const CXTPCalendarThemeIntValue& operator=(int nValue) {
  956. SetCustomValue(nValue);
  957. return *this;
  958. }
  959. };
  960. //===========================================================================
  961. // Summary:
  962. //     Helper class provides functionality to manage customized BOOL value
  963. //     objects.
  964. //===========================================================================
  965. class _XTP_EXT_CLASS CXTPCalendarThemeBOOLValue : public CXTPCalendarThemeCustomizableXValueT<BOOL, BOOL>
  966. {
  967. public:
  968. //-----------------------------------------------------------------------
  969. // Summary:
  970. //     Default object constructor.
  971. //-----------------------------------------------------------------------
  972. CXTPCalendarThemeBOOLValue()
  973. {
  974. m_ValueStandard = m_ValueCustom = FALSE;
  975. }
  976. //-----------------------------------------------------------------------
  977. // Summary:
  978. //     This method reads or writes value data from or to an storage.
  979. // Parameters:
  980. //     pPX          - A CXTPPropExchange object to serialize to or from.
  981. //     pcszPropName - A value name.
  982. //     rXValue      - Reference to value.
  983. //     bStandard    - Standard or Custom value.
  984. // See Also: DoPropExchange()
  985. //-----------------------------------------------------------------------
  986. virtual void DoPX_Value(CXTPPropExchange* pPX, LPCTSTR pcszPropName, BOOL& rXValue, BOOL bStandard)
  987. {
  988. if (pPX->IsStoring())
  989. {
  990. if (bStandard && !m_bIsStandardSet ||
  991. !bStandard && !m_bIsCustomSet)
  992. {
  993. rXValue = FALSE;
  994. }
  995. }
  996. PX_Bool(pPX, pcszPropName, rXValue);
  997. }
  998. //-----------------------------------------------------------------------
  999. // Summary:
  1000. //     This member operator is use to set custom value.
  1001. // Parameters:
  1002. //      bValue    - A new custom value.
  1003. // Returns:
  1004. //      Reference to this object.
  1005. //-----------------------------------------------------------------------
  1006. const CXTPCalendarThemeBOOLValue& operator=(BOOL bValue) {
  1007. SetCustomValue(bValue);
  1008. return *this;
  1009. }
  1010. };
  1011. //===========================================================================
  1012. // Summary:
  1013. //     Helper class provides functionality to manage customized CRect value
  1014. //     objects.
  1015. //===========================================================================
  1016. class _XTP_EXT_CLASS CXTPCalendarThemeRectValue :
  1017. public CXTPCalendarThemeCustomizableXValueT<CRect, CRect>
  1018. {
  1019. public:
  1020. //-----------------------------------------------------------------------
  1021. // Summary:
  1022. //     Default object constructor.
  1023. //-----------------------------------------------------------------------
  1024. CXTPCalendarThemeRectValue()
  1025. {
  1026. m_ValueStandard = m_ValueCustom = CRect(0, 0, 0, 0);
  1027. }
  1028. //-----------------------------------------------------------------------
  1029. // Summary:
  1030. //     This method reads or writes value data from or to an storage.
  1031. // Parameters:
  1032. //     pPX          - A CXTPPropExchange object to serialize to or from.
  1033. //     pcszPropName - A value name.
  1034. //     rXValue      - Reference to value.
  1035. //     bStandard    - Standard or Custom value.
  1036. // See Also: DoPropExchange()
  1037. //-----------------------------------------------------------------------
  1038. virtual void DoPX_Value(CXTPPropExchange* pPX, LPCTSTR pcszPropName, CRect& rXValue, BOOL bStandard) {
  1039. const CRect crcZero(0, 0, 0, 0);
  1040. if (pPX->IsStoring())
  1041. {
  1042. if (bStandard && !m_bIsStandardSet ||
  1043. !bStandard && !m_bIsCustomSet)
  1044. {
  1045. rXValue = crcZero;
  1046. }
  1047. }
  1048. PX_Rect(pPX, pcszPropName, rXValue, crcZero);
  1049. }
  1050. //-----------------------------------------------------------------------
  1051. // Summary:
  1052. //     This member operator is use to set custom value.
  1053. // Parameters:
  1054. //      rcValue    - A new custom value.
  1055. // Returns:
  1056. //      Reference to this object.
  1057. //-----------------------------------------------------------------------
  1058. const CXTPCalendarThemeRectValue& operator=(const CRect& rcValue) {
  1059. SetCustomValue((CRect&)rcValue);
  1060. return *this;
  1061. }
  1062. };
  1063. //===========================================================================
  1064. // Summary:
  1065. //     Helper base class  to implement parts for calendar paint manager.
  1066. //     objects.
  1067. //===========================================================================
  1068. class _XTP_EXT_CLASS CXTPCalendarViewPart : public CXTPCmdTarget
  1069. {
  1070. //{{AFX_CODEJOCK_PRIVATE
  1071. friend class CXTPCalendarPaintManager;
  1072. //}}AFX_CODEJOCK_PRIVATE
  1073. public:
  1074. //-----------------------------------------------------------------------
  1075. // Summary:
  1076. //     Default constructor.
  1077. // Parameters:
  1078. //     pParentPart - Pointer to parent class, can be NULL.
  1079. //-----------------------------------------------------------------------
  1080. CXTPCalendarViewPart(CXTPCalendarViewPart* pParentPart = NULL);
  1081. //-----------------------------------------------------------------------
  1082. // Summary:
  1083. //     Default destructor.
  1084. //-----------------------------------------------------------------------
  1085. virtual ~CXTPCalendarViewPart();
  1086. public:
  1087. //-----------------------------------------------------------------------
  1088. // Summary:
  1089. //     This member function is used to set graphical related
  1090. //     parameters equal to the system settings.
  1091. //-----------------------------------------------------------------------
  1092. virtual void RefreshMetrics();
  1093. public:
  1094. //-----------------------------------------------------------------------
  1095. // Summary:
  1096. //     This member function is used to obtain the color used to fill
  1097. //     the background of UI elements.
  1098. // Returns:
  1099. //     A COLORREF that contains the value of the background color.
  1100. //-----------------------------------------------------------------------
  1101. virtual COLORREF GetBackgroundColor();
  1102. //-----------------------------------------------------------------------
  1103. // Summary:
  1104. //     This member function is used to obtain the color used to display text.
  1105. // Returns:
  1106. //     A COLORREF that contains the value of text color.
  1107. //-----------------------------------------------------------------------
  1108. virtual COLORREF GetTextColor();
  1109. //-----------------------------------------------------------------------
  1110. // Summary:
  1111. //     This member function is used to obtain a pointer to a CFont
  1112. //     object that contains the font that is used for displaying the
  1113. //     text.
  1114. // Returns:
  1115. //     A reference to a CFont object that contains the font used to
  1116. //     display the text.
  1117. //-----------------------------------------------------------------------
  1118. virtual CFont& GetTextFont();
  1119. //-----------------------------------------------------------------------
  1120. // Summary:
  1121. //     This member function is used to display the text using the
  1122. //     custom font and color.
  1123. // Parameters:
  1124. //     pDC     - A pointer to a valid device context.
  1125. //     str     - A CString that contains the text to display.
  1126. //     lpRect  - An LPRECT that contains the rectangle coordinates
  1127. //               used to display the text.
  1128. //     nFormat - A UINT that contains additional format parameters.
  1129. //-----------------------------------------------------------------------
  1130. void DrawText(CDC* pDC, const CString& str, LPRECT lpRect, UINT nFormat) {
  1131. CFont* pOldFont = pDC->SelectObject(&GetTextFont());
  1132. pDC->SetTextColor(GetTextColor());
  1133. nFormat |= DT_NOPREFIX;
  1134. pDC->DrawText(str, lpRect, nFormat);
  1135. pDC->SelectObject(pOldFont);
  1136. }
  1137. //-----------------------------------------------------------------------
  1138. // Summary:
  1139. //     This member function is used to draw a single line text in the
  1140. //     center of the rect. If rect width is not enough to draw all chars -
  1141. //     text is aligned to left (or right, see nFormat) or the rect.
  1142. // Parameters:
  1143. //     pDC     - A pointer to a valid device context.
  1144. //     str     - A CString that contains the text to display.
  1145. //     lpRect  - An LPRECT that contains the rectangle coordinates
  1146. //               used to display the text.
  1147. //     nFormat - A UINT that contains additional format parameters as
  1148. //               combination of flags: DT_VCENTER, DT_LEFT, DT_RIGHT or 0.
  1149. //-----------------------------------------------------------------------
  1150. void DrawLine_CenterLR(CDC* pDC, const CString& str, LPRECT lpRect, UINT nFormat)
  1151. {
  1152. CFont* pOldFont = pDC->SelectObject(&GetTextFont());
  1153. pDC->SetTextColor(GetTextColor());
  1154. nFormat |= DT_NOPREFIX | DT_SINGLELINE;
  1155. int nLeftRight = nFormat & (DT_LEFT | DT_RIGHT);
  1156. nFormat &= ~(DT_CENTER | DT_LEFT | DT_RIGHT);
  1157. CSize sz = pDC->GetTextExtent(str);
  1158. if (sz.cx < labs(lpRect->right - lpRect->left) ) {
  1159. nFormat |= DT_CENTER;
  1160. }
  1161. else
  1162. {
  1163. nFormat |= nLeftRight ? nLeftRight : DT_LEFT;
  1164. }
  1165. pDC->DrawText(str, lpRect, nFormat);
  1166. pDC->SelectObject(pOldFont);
  1167. }
  1168. //-----------------------------------------------------------------------
  1169. // Summary:
  1170. //     This member function is used to draw a single line text in the rect.
  1171. //     If rect width is not enough to draw all chars - nFormatSmall flags are used,
  1172. //     otherwise nFormatNormal flags are used.
  1173. // Parameters:
  1174. //     pDC           - A pointer to a valid device context.
  1175. //     str           - A CString that contains the text to display.
  1176. //     lpRect        - An LPRECT that contains the rectangle coordinates
  1177. //                     used to display the text.
  1178. //     nFormatNormal - A UINT that contains format parameters when rect width
  1179. //                     is enough to draw all text chars.
  1180. //     nFormatSmall  - A UINT that contains format parameters when rect width
  1181. //                     is not enough to draw all text chars.
  1182. //-----------------------------------------------------------------------
  1183. void DrawLineEx(CDC* pDC, const CString& str, LPRECT lpRect, UINT nFormatNormal, UINT nFormatSmall)
  1184. {
  1185. CFont* pOldFont = pDC->SelectObject(&GetTextFont());
  1186. pDC->SetTextColor(GetTextColor());
  1187. UINT nFormat = 0;
  1188. CSize sz = pDC->GetTextExtent(str);
  1189. if (sz.cx < labs(lpRect->right - lpRect->left) ) {
  1190. nFormat = nFormatNormal | DT_NOPREFIX | DT_SINGLELINE;
  1191. }
  1192. else
  1193. {
  1194. nFormat = nFormatSmall | DT_NOPREFIX | DT_SINGLELINE;
  1195. }
  1196. pDC->DrawText(str, lpRect, nFormat);
  1197. pDC->SelectObject(pOldFont);
  1198. }
  1199. //-----------------------------------------------------------------------
  1200. // Summary:
  1201. //     This member function is used to calculate the size of the area
  1202. //     required to display the given text.
  1203. // Parameters:
  1204. //     pDC - A pointer to a valid device context.
  1205. //     str - A CString that contains the string of text to display.
  1206. // Returns:
  1207. //     A CSize object that contains the dimensions required to display
  1208. //     the text.
  1209. //-----------------------------------------------------------------------
  1210. CSize GetTextExtent(CDC* pDC, const CString& str) {
  1211. CFont* pOldFont = pDC->SelectObject(&GetTextFont());
  1212. CSize sz = pDC->GetTextExtent(str);
  1213. pDC->SelectObject(pOldFont);
  1214. return sz;
  1215. }
  1216. //-----------------------------------------------------------------------
  1217. // Summary:
  1218. //     This member function is used to set the new color used to fill
  1219. //     the background.
  1220. // Parameters:
  1221. //     clr - A COLORREF that contains the new color value.
  1222. //-----------------------------------------------------------------------
  1223. void SetBackgroundColor(COLORREF clr) {
  1224. m_clrBackground = clr;
  1225. }
  1226. //-----------------------------------------------------------------------
  1227. // Summary:
  1228. //     This member function is used to set the new color used to display
  1229. //     the text.
  1230. // Parameters:
  1231. //     clr - A COLORREF that contains the new color value.
  1232. //-----------------------------------------------------------------------
  1233. void SetTextColor(COLORREF clr) {
  1234. m_clrTextColor = clr;
  1235. }
  1236. //-----------------------------------------------------------------------
  1237. // Summary:
  1238. //     This member function is used to set the new font used to display
  1239. //     the text.
  1240. // Parameters:
  1241. //     pLogFont - A pointer to a LOGFONT struct that contains the new
  1242. //                font used to display the text.
  1243. //-----------------------------------------------------------------------
  1244. void SetTextFont(LOGFONT* pLogFont) {
  1245. m_fntText = pLogFont;
  1246. }
  1247. // Attributes
  1248. protected:
  1249. CXTPPaintManagerColor m_clrTextColor;  // Stores color settings used to display text.
  1250. CXTPPaintManagerColor m_clrBackground; // Stores color settings used to to fill background of UI item.
  1251. CXTPCalendarViewPartFontValue m_fntText;        // Stores font settings used to display text.
  1252. CXTPCalendarViewPart* m_pParentPart;            // Pointer to the parent CXTPCalendarViewPart object.
  1253. CXTPCalendarPaintManager* m_pPaintManager;      // Pointer to containing CXTPCalendarPaintManager object
  1254. };
  1255. //---------------------------------------------------------------------------
  1256. // Summary:
  1257. //     Call this function within your class's DoPropExchange member function
  1258. //     to serialize or initialize a COLORREF property.
  1259. //     The property's value is read from or written to the variable referenced
  1260. //     by refColor, as appropriate.
  1261. // Parameters:
  1262. //     pPX          - Pointer to the CXTPPropExchange object
  1263. //                    (typically passed as a parameter to DoPropExchange).
  1264. //     pcszPropName - The name of the property being exchanged.
  1265. //     refColor     - Reference to the variable where the property is stored.
  1266. // Returns:
  1267. //     Nonzero if the exchange was successful; 0 if unsuccessful.
  1268. //---------------------------------------------------------------------------
  1269. _XTP_EXT_CLASS BOOL AFX_CDECL PX_Color(CXTPPropExchange* pPX, LPCTSTR pcszPropName,
  1270. COLORREF& refColor);
  1271. //---------------------------------------------------------------------------
  1272. // Summary:
  1273. //     Call this function within your class's DoPropExchange member function
  1274. //     to serialize or initialize a customized Color property.
  1275. //     The property's value is read from or written to the variable referenced
  1276. //     by refColor, as appropriate.
  1277. // Parameters:
  1278. //     pPX          - Pointer to the CXTPPropExchange object
  1279. //                    (typically passed as a parameter to DoPropExchange).
  1280. //     pcszPropName - The name of the property being exchanged.
  1281. //     refColor     - Reference to the variable where the property is stored.
  1282. // Returns:
  1283. //     Nonzero if the exchange was successful; 0 if unsuccessful.
  1284. //---------------------------------------------------------------------------
  1285. _XTP_EXT_CLASS BOOL AFX_CDECL PX_Color(CXTPPropExchange* pPX, LPCTSTR pcszPropName,
  1286. CXTPPaintManagerColor& refColor);
  1287. //---------------------------------------------------------------------------
  1288. // Summary:
  1289. //     Call this function within your class's DoPropExchange member function
  1290. //     to serialize or initialize a customized Gradient Color property.
  1291. //     The property's value is read from or written to the variable referenced
  1292. //     by refGrColor, as appropriate.
  1293. // Parameters:
  1294. //     pPX          - Pointer to the CXTPPropExchange object
  1295. //                    (typically passed as a parameter to DoPropExchange).
  1296. //     pcszPropName - The name of the property being exchanged.
  1297. //     refGrColor   - Reference to the variable where the property is stored.
  1298. // Returns:
  1299. //     Nonzero if the exchange was successful; 0 if unsuccessful.
  1300. //---------------------------------------------------------------------------
  1301. _XTP_EXT_CLASS BOOL AFX_CDECL PX_GrColor(CXTPPropExchange* pPX, LPCTSTR psczPropName,
  1302. CXTPPaintManagerColorGradient& refGrColor);
  1303. //---------------------------------------------------------------------------
  1304. // Summary:
  1305. //     Call this function within your class's DoPropExchange member function
  1306. //     to serialize or initialize a LOGFONT property.
  1307. //     The property's value is read from or written to the variable referenced
  1308. //     by rLogFont, as appropriate.
  1309. // Parameters:
  1310. //     pPX          - Pointer to the CXTPPropExchange object
  1311. //                    (typically passed as a parameter to DoPropExchange).
  1312. //     pcszPropName - The name of the property being exchanged.
  1313. //     rLogFont     - Reference to the variable where the property is stored.
  1314. // Returns:
  1315. //     Nonzero if the exchange was successful; 0 if unsuccessful.
  1316. //---------------------------------------------------------------------------
  1317. _XTP_EXT_CLASS BOOL AFX_CDECL PX_Font(CXTPPropExchange* pPX, LPCTSTR pcszPropName,
  1318. LOGFONT& rLogFont);
  1319. //---------------------------------------------------------------------------
  1320. // Summary:
  1321. //     Call this function within your class's DoPropExchange member function
  1322. //     to serialize or initialize a customized Font property.
  1323. //     The property's value is read from or written to the variable referenced
  1324. //     by refFont, as appropriate.
  1325. // Parameters:
  1326. //     pPX          - Pointer to the CXTPPropExchange object
  1327. //                    (typically passed as a parameter to DoPropExchange).
  1328. //     pcszPropName - The name of the property being exchanged.
  1329. //     refFont      - Reference to the variable where the property is stored.
  1330. // Returns:
  1331. //     Nonzero if the exchange was successful; 0 if unsuccessful.
  1332. //---------------------------------------------------------------------------
  1333. _XTP_EXT_CLASS BOOL AFX_CDECL PX_Font(CXTPPropExchange* pPX, LPCTSTR pcszPropName,
  1334. CXTPCalendarThemeFontValue& refFont);
  1335. /////////////////////////////////////////////////////////////////////////////
  1336. /////////////////////////////////////////////////////////////////////////////
  1337. #endif // !defined(_XTPCALENDARVIEWPART_H__)