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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupFrameworkElement.h: interface for the CXTPMarkupFrameworkElement class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO 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. #if !defined(__XTPMARKUPFRAMEWORKELEMENT_H__)
  21. #define __XTPMARKUPFRAMEWORKELEMENT_H__
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. #include "XTPMarkupUIElement.h"
  26. class CXTPMarkupResourceDictionary;
  27. class CXTPMarkupStyle;
  28. class CXTPMarkupTriggerCollection;
  29. class _XTP_EXT_CLASS CXTPMarkupFrameworkElement : public CXTPMarkupUIElement
  30. {
  31. private:
  32. struct MINMAX
  33. {
  34. public:
  35. MINMAX();
  36. void Update(const CXTPMarkupFrameworkElement* pElement);
  37. public:
  38. int nMaxHeight;
  39. int nMinHeight;
  40. int nMaxWidth;
  41. int nMinWidth;
  42. };
  43. private:
  44. DECLARE_MARKUPCLASS(CXTPMarkupFrameworkElement)
  45. protected:
  46. CXTPMarkupFrameworkElement();
  47. virtual ~CXTPMarkupFrameworkElement();
  48. public:
  49. void SetMargin(int nLeft, int nTop, int nRight, int nBottom);
  50. void SetMargin(int nMargin);
  51. CXTPMarkupThickness* GetMargin() const;
  52. void SetMinWidth(int nWidth);
  53. void SetMaxWidth(int nWidth);
  54. void SetWidth(int nWidth);
  55. void SetMinHeight(int nHeight);
  56. void SetMaxHeight(int nHeight);
  57. void SetHeight(int nHeight);
  58. int GetMinWidth() const;
  59. int GetMaxWidth() const;
  60. int GetWidth() const;
  61. int GetMinHeight() const;
  62. int GetMaxHeight() const;
  63. int GetHeight() const;
  64. CXTPMarkupObject* GetTag() const;
  65. void SetTag(CXTPMarkupObject* pTag);
  66. void SetHorizontalAlignment(XTPMarkupHorizontalAlignment alignment);
  67. void SetVerticalAlignment(XTPMarkupVerticalAlignment alignment);
  68. XTPMarkupHorizontalAlignment GetHorizontalAlignment() const;
  69. XTPMarkupVerticalAlignment GetVerticalAlignment() const;
  70. CSize GetActualSize() const;
  71. BOOL GetClipToBounds() const;
  72. CXTPMarkupStyle* GetStyle() const;
  73. protected:
  74. virtual CSize MeasureCore(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize);
  75. virtual CSize MeasureOverride(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize);
  76. virtual void ArrangeCore(CRect rcFinalRect);
  77. virtual CSize ArrangeOverride(CSize szFinalSize);
  78. BOOL GetLayoutClip(CRect& rc) const;
  79. virtual void OnPropertyChanged(CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pOldValue, CXTPMarkupObject* pNewValue);
  80. private:
  81. CPoint ComputeAlignmentOffset(CSize clientSize, CSize inkSize) const;
  82. protected:
  83. BOOL m_bNeedsClipBounds;
  84. CSize m_szUnclippedDesiredSize;
  85. BOOL m_bUnclippedDesiredSize;
  86. MINMAX m_mmBounds;
  87. public:
  88. static CXTPMarkupDependencyProperty* m_pMarginProperty;
  89. static CXTPMarkupDependencyProperty* m_pHorizontalAlignmentProperty;
  90. static CXTPMarkupDependencyProperty* m_pVerticalAlignmentProperty;
  91. static CXTPMarkupDependencyProperty* m_pWidthProperty;
  92. static CXTPMarkupDependencyProperty* m_pHeightProperty;
  93. static CXTPMarkupDependencyProperty* m_pMinWidthProperty;
  94. static CXTPMarkupDependencyProperty* m_pMinHeightProperty;
  95. static CXTPMarkupDependencyProperty* m_pMaxWidthProperty;
  96. static CXTPMarkupDependencyProperty* m_pMaxHeightProperty;
  97. static CXTPMarkupDependencyProperty* m_pTagProperty;
  98. };
  99. AFX_INLINE void CXTPMarkupFrameworkElement::SetMargin(int nLeft, int nTop, int nRight, int nBottom) {
  100. SetValue(m_pMarginProperty, new CXTPMarkupThickness(nLeft, nTop, nRight, nBottom));
  101. }
  102. AFX_INLINE void CXTPMarkupFrameworkElement::SetMargin(int nMargin) {
  103. SetValue(m_pMarginProperty, new CXTPMarkupThickness(nMargin));
  104. }
  105. AFX_INLINE CXTPMarkupThickness* CXTPMarkupFrameworkElement::GetMargin() const {
  106. return MARKUP_STATICCAST(CXTPMarkupThickness, GetValue(m_pMarginProperty));
  107. }
  108. AFX_INLINE void CXTPMarkupFrameworkElement::SetMinWidth(int nWidth) {
  109. SetValue(m_pMinWidthProperty, new CXTPMarkupInt(nWidth));
  110. }
  111. AFX_INLINE void CXTPMarkupFrameworkElement::SetMaxWidth(int nWidth) {
  112. SetValue(m_pMaxWidthProperty, new CXTPMarkupInt(nWidth));
  113. }
  114. AFX_INLINE void CXTPMarkupFrameworkElement::SetWidth(int nWidth) {
  115. SetValue(m_pWidthProperty, new CXTPMarkupInt(nWidth));
  116. }
  117. AFX_INLINE void CXTPMarkupFrameworkElement::SetMinHeight(int nHeight) {
  118. SetValue(m_pMinHeightProperty, new CXTPMarkupInt(nHeight));
  119. }
  120. AFX_INLINE void CXTPMarkupFrameworkElement::SetMaxHeight(int nHeight) {
  121. SetValue(m_pMaxHeightProperty, new CXTPMarkupInt(nHeight));
  122. }
  123. AFX_INLINE void CXTPMarkupFrameworkElement::SetHeight(int nHeight) {
  124. SetValue(m_pHeightProperty, new CXTPMarkupInt(nHeight));
  125. }
  126. AFX_INLINE void CXTPMarkupFrameworkElement::SetHorizontalAlignment(XTPMarkupHorizontalAlignment alignment) {
  127. SetValue(m_pHorizontalAlignmentProperty, CXTPMarkupEnum::CreateValue(alignment));
  128. }
  129. AFX_INLINE void CXTPMarkupFrameworkElement::SetVerticalAlignment(XTPMarkupVerticalAlignment alignment) {
  130. SetValue(m_pVerticalAlignmentProperty, CXTPMarkupEnum::CreateValue(alignment));
  131. }
  132. AFX_INLINE CSize CXTPMarkupFrameworkElement::GetActualSize() const {
  133. return m_szRenderSize;
  134. }
  135. AFX_INLINE int CXTPMarkupFrameworkElement::GetMinWidth() const {
  136. CXTPMarkupInt* pValue = MARKUP_STATICCAST(CXTPMarkupInt, GetValue(m_pMinWidthProperty));
  137. return pValue != NULL ? (int)*pValue : 0;
  138. }
  139. AFX_INLINE int CXTPMarkupFrameworkElement::GetMaxWidth() const {
  140. CXTPMarkupInt* pValue = MARKUP_STATICCAST(CXTPMarkupInt, GetValue(m_pMaxWidthProperty));
  141. return pValue != NULL ? (int)*pValue : INT_MAX;
  142. }
  143. AFX_INLINE int CXTPMarkupFrameworkElement::GetWidth() const {
  144. CXTPMarkupInt* pValue = MARKUP_STATICCAST(CXTPMarkupInt, GetValue(m_pWidthProperty));
  145. return pValue != NULL ? (int)*pValue : 0;
  146. }
  147. AFX_INLINE int CXTPMarkupFrameworkElement::GetMinHeight() const {
  148. CXTPMarkupInt* pValue = MARKUP_STATICCAST(CXTPMarkupInt, GetValue(m_pMinHeightProperty));
  149. return pValue != NULL ? (int)*pValue : 0;
  150. }
  151. AFX_INLINE int CXTPMarkupFrameworkElement::GetMaxHeight() const {
  152. CXTPMarkupInt* pValue = MARKUP_STATICCAST(CXTPMarkupInt, GetValue(m_pMaxHeightProperty));
  153. return pValue != NULL ? (int)*pValue : INT_MAX;
  154. }
  155. AFX_INLINE int CXTPMarkupFrameworkElement::GetHeight() const {
  156. CXTPMarkupInt* pValue = MARKUP_STATICCAST(CXTPMarkupInt, GetValue(m_pHeightProperty));
  157. return pValue != NULL ? (int)*pValue : 0;
  158. }
  159. AFX_INLINE void CXTPMarkupFrameworkElement::SetTag(CXTPMarkupObject* pTag) {
  160. SetValue(m_pTagProperty, pTag);
  161. }
  162. AFX_INLINE CXTPMarkupObject* CXTPMarkupFrameworkElement::GetTag() const {
  163. return GetValue(m_pTagProperty);
  164. }
  165. AFX_INLINE CXTPMarkupStyle* CXTPMarkupFrameworkElement::GetStyle() const {
  166. return m_pStyleCache;
  167. }
  168. #endif // !defined(__XTPMARKUPFRAMEWORKELEMENT_H__)