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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupUIElement.h: interface for the CXTPMarkupUIElement 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(__XTPMARKUPUIELEMENT_H__)
  21. #define __XTPMARKUPUIELEMENT_H__
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. class CXTPMarkupContext;
  26. #include "XTPMarkupInputElement.h"
  27. //===========================================================================
  28. // Summary: Provides rendering support for XML Markup, which includes hit testing,
  29. //          coordinate transformation, and bounding box calculations.
  30. //===========================================================================
  31. class _XTP_EXT_CLASS CXTPMarkupVisual : public CXTPMarkupInputElement
  32. {
  33. DECLARE_MARKUPCLASS(CXTPMarkupVisual);
  34. public:
  35. //-------------------------------------------------------------------------
  36. // Summary: Provides the base initialization for objects derived from the
  37. //          CXTPMarkupVisual class.
  38. //-------------------------------------------------------------------------
  39. CXTPMarkupVisual();
  40. public:
  41. void Render(CXTPMarkupDrawingContext* drawingContext);
  42. //-----------------------------------------------------------------------
  43. // Input:   point - Point to test.
  44. // Summary: Detacts if a point belongs to this object.
  45. // Returns: The CXTPMarkupInputElement at the specified point.
  46. //-----------------------------------------------------------------------
  47. CXTPMarkupInputElement* InputHitTest(CPoint point) const;
  48. public:
  49. //-----------------------------------------------------------------------
  50. // Summary: Gets the number of child elements for the Visual.
  51. // Remarks: By default, a Visual has no children. Therefore, the default
  52. //          implementation always returns 0.
  53. // Returns: The number of child elements.
  54. //-----------------------------------------------------------------------
  55. virtual int GetVisualChildrenCount() const;
  56. //-----------------------------------------------------------------------
  57. // Input:   nIndex - The index of the visual object in the VisualCollection.
  58. // Summary: Returns the specified Visual in the parent VisualCollection.
  59. // Returns: The child in the VisualCollection at the specified index value.
  60. //-----------------------------------------------------------------------
  61. virtual CXTPMarkupVisual* GetVisualChild(int nIndex) const;
  62. virtual int GetLogicalChildrenCount() const;
  63. virtual CXTPMarkupObject* GetLogicalChild(int nIndex) const;
  64. CRect GetBoundRect() const;
  65. //-----------------------------------------------------------------------
  66. // Summary: Gets the final render size of this element.
  67. // Returns: The rendered size for this element.
  68. //-----------------------------------------------------------------------
  69. CSize GetRenderSize() const;
  70. //-----------------------------------------------------------------------
  71. // Summary: Gets or sets the offset value of the visual object.
  72. // Returns: The offset value of the visual object.
  73. //-----------------------------------------------------------------------
  74. CPoint GetVisualOffset() const;
  75. //-----------------------------------------------------------------------
  76. // Input:   rc - The available size provided by the element.
  77. // Summary: Returns an alternative clipping geometry.
  78. // Returns: The potential clipping geometry.
  79. //-----------------------------------------------------------------------
  80. virtual BOOL GetLayoutClip(CRect& rc) const;
  81. //-----------------------------------------------------------------------
  82. // Summary: Gets the visual tree parent of the visual object.
  83. // Returns: The Visual parent.
  84. //-----------------------------------------------------------------------
  85. CXTPMarkupVisual* GetVisualParent() const;
  86. protected:
  87. virtual void OnRender(CXTPMarkupDrawingContext* drawingContext);
  88. virtual void OnRenderFocusVisual(CXTPMarkupDrawingContext* drawingContext);
  89. virtual CXTPMarkupInputElement* InputHitTestOverride(CPoint point) const;
  90. void UpdateBoundRect();
  91. protected:
  92. CPoint m_ptVisualOffset;        // The offset value of the visual object.
  93. CSize m_szRenderSize;           // The rendered size for this element.
  94. CRect m_rcBoundRect;
  95. };
  96. //===========================================================================
  97. // Summary: Base class for XML Markup core level implementations.
  98. //===========================================================================
  99. class _XTP_EXT_CLASS CXTPMarkupUIElement : public CXTPMarkupVisual
  100. {
  101. DECLARE_MARKUPCLASS(CXTPMarkupUIElement);
  102. protected:
  103. //-------------------------------------------------------------------------
  104. // Summary: Initializes a new instance of the CXTPMarkupUIElement class.
  105. //-------------------------------------------------------------------------
  106. CXTPMarkupUIElement();
  107. //-------------------------------------------------------------------------
  108. // Summary: Destructor
  109. //-------------------------------------------------------------------------
  110. virtual ~CXTPMarkupUIElement();
  111. public:
  112. //-----------------------------------------------------------------------
  113. // Input:   rcFinalRect - The final size that the parent computes for the child
  114. //                  element, provided as a CRect instance.
  115. // Summary: Positions child elements and determines a size for a CXTPMarkupUIElement.
  116. //          Parent elements call this method from their ArrangeOverride implementation
  117. //          to form a recursive layout update. This method constitutes the
  118. //          second pass of a layout update.
  119. //-----------------------------------------------------------------------
  120. void Arrange(CRect rcFinalRect);
  121. //-----------------------------------------------------------------------
  122. // Input:   pDC - Pointer to a CXTPMarkupDrawingContext.
  123. //          szAvailableSize - The available space that a parent element can allocate
  124. //                  a child element. A child element can request a larger
  125. //                  space than what is available; the provided size might
  126. //                  be accommodated if scrolling is possible in the
  127. //                  content model for the current element.
  128. // Summary: Updates the DesiredSize of a CXTPMarkupUIElement. Parent elements call
  129. //          this method from their own MeasureOvveride implementations to form
  130. //          a recursive layout update. Calling this method constitutes
  131. //          the first pass (the "Measure" pass) of a layout update.
  132. //-----------------------------------------------------------------------
  133. void Measure(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize);
  134. public:
  135. //-----------------------------------------------------------------------
  136. // Summary: Gets the size that this element computed during the measure pass of the layout process.
  137. // Returns: The computed size, which becomes the desired size for the arrange pass.
  138. // Remarks: DesiredSize is typically checked as one of the measurement
  139. //          factors when you implement layout behavior overrides such
  140. //          as ArrangeOverride, MeasureOverride or OnRender.
  141. //-----------------------------------------------------------------------
  142. CSize GetDesiredSize() const;
  143. //-----------------------------------------------------------------------
  144. // Summary: Gets the final render size of this element.
  145. // Returns: The rendered size for this element.
  146. //-----------------------------------------------------------------------
  147. CRect GetFinalRect() const;
  148. //-----------------------------------------------------------------------
  149. // Summary: Gets the user interface (UI) visibility of this element. This
  150. //          is a dependency property.
  151. // Returns: NEEDS COMMENT
  152. //-----------------------------------------------------------------------
  153. XTPMarkupVisibility GetVisibility() const;
  154. //-----------------------------------------------------------------------
  155. // Input:   visibility - A value of the XTPMarkupVisibility enumeration. The default value is Visible.
  156. // Summary: sets the user interface (UI) visibility of this element. This
  157. //          is a dependency property.
  158. //-----------------------------------------------------------------------
  159. void SetVisibility(XTPMarkupVisibility visibility);
  160. //-----------------------------------------------------------------------
  161. // Summary: Gets or sets a value that indicates whether the element can
  162. //          receive focus. This is a dependency property.
  163. // Returns: true if the element is focusable; otherwise false. The
  164. //          default is false, but see Remarks.
  165. //-----------------------------------------------------------------------
  166. BOOL IsFocusable() const;
  167. //-----------------------------------------------------------------------
  168. // Summary: Gets a value indicating whether this element is visible in
  169. //          the user interface (UI). This is a dependency property.
  170. // Returns: true if the element is visible; otherwise, false.
  171. //-----------------------------------------------------------------------
  172. BOOL IsVisible() const;
  173. //-----------------------------------------------------------------------
  174. // Summary: Gets or sets a value indicating whether this element is
  175. //          enabled in the user interface (UI). This is a dependency property.
  176. // Returns: true if the element is enabled; otherwise, false. The
  177. //          default value is true.
  178. //-----------------------------------------------------------------------
  179. BOOL IsEnabled() const;
  180. public:
  181. //-------------------------------------------------------------------------
  182. // Summary: Invalidates the arrange state (layout) for the element.
  183. // Remarks: Frequent calls to InvalidateArrange have significant performance
  184. //          consequences. Therefore, avoid calling this method unless you
  185. //          absolutely require precise layout state for subsequent calls to
  186. //          other APIs in your code.
  187. //-------------------------------------------------------------------------
  188. virtual void InvalidateArrange();
  189. //-------------------------------------------------------------------------
  190. // Summary: Invalidates the rendering of the element, and forces a complete
  191. //          new layout pass. OnRender is called after the layout cycle is completed.
  192. // Remarks: This method calls InvalidateArrange internally.
  193. //-------------------------------------------------------------------------
  194. virtual void InvalidateVisual();
  195. //-------------------------------------------------------------------------
  196. // Summary: Invalidates the measurement state (layout) for the element.
  197. // Remarks: Calling this method also calls InvalidateArrange internally,
  198. //          there is no need to call InvalidateMeasure and
  199. //          InvalidateArrange in succession.
  200. //-------------------------------------------------------------------------
  201. virtual void InvalidateMeasure();
  202. protected:
  203. //-----------------------------------------------------------------------
  204. // Input:   rcFinalRect - The final area within the parent that element
  205. //                        should use to arrange itself and its child elements.
  206. // Summary: Defines the template for the core-level arrange layout definition.
  207. //-----------------------------------------------------------------------
  208. virtual void ArrangeCore(CRect rcFinalRect);
  209. //-----------------------------------------------------------------------
  210. // Input:   szAvailableSize - The available size that the parent element can
  211. //                 allocate for the child.
  212. //          pDC - Device context.
  213. // Summary: When overridden in a derived class, provides measurement logic
  214. //          for sizing this element properly, with consideration of the
  215. //          size of any child element content.
  216. // Returns: The desired size of this element in layout.
  217. //-----------------------------------------------------------------------
  218. virtual CSize MeasureCore(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize);
  219. //-----------------------------------------------------------------------
  220. // Input:   rc - The available size provided by the element.
  221. // Summary: Returns an alternative clipping geometry that represents the
  222. //          region that would be clipped if m_pClipToBoundsProperty were set to true.
  223. // Returns: The potential clipping geometry.
  224. //-----------------------------------------------------------------------
  225. virtual BOOL GetLayoutClip(CRect& rc) const;
  226. virtual void InvalidateMeasureOverride(CXTPMarkupDrawingContext* pDC);
  227. protected:
  228. CSize m_szDesiredSize;  // Gets the size that this element computed during the measure pass of the layout process.
  229. CRect m_rcFinalRect;
  230. BOOL m_bMeasureDirty;
  231. BOOL m_bNeverMeasured;
  232. CSize m_szPreviousAvailableSize;
  233. BOOL m_bArrangeDirty;
  234. BOOL m_bNeverArranged;
  235. BOOL m_bArrangeInProgress;
  236. BOOL m_bMeasureInProgress;
  237. public:
  238. static CXTPMarkupDependencyProperty* m_pClipToBoundsProperty;  // Gets or sets a value indicating whether to
  239.                                                                // clip the content of this element (or content
  240.                                                                // coming from the child elements of this element)
  241.                                                                // to fit into the size of the containing element. This is a dependency property.
  242. static CXTPMarkupDependencyProperty* m_pVisibilityProperty;    // A value indicating whether this element is visible in the user interface (UI).
  243. static CXTPMarkupDependencyProperty* m_pFocusableProperty;     // A value that indicates whether the element can receive focus.
  244. static CXTPMarkupDependencyProperty* m_pIsEnabledProperty;     // A value indicating whether this element is enabled in the user interface (UI).
  245. };
  246. AFX_INLINE void CXTPMarkupVisual::OnRender(CXTPMarkupDrawingContext* /*drawingContext*/) {
  247. }
  248. AFX_INLINE void CXTPMarkupVisual::OnRenderFocusVisual(CXTPMarkupDrawingContext* /*drawingContext*/) {
  249. }
  250. AFX_INLINE CSize CXTPMarkupVisual::GetRenderSize() const {
  251. return m_szRenderSize;
  252. }
  253. AFX_INLINE CRect CXTPMarkupVisual::GetBoundRect() const {
  254. return m_rcBoundRect;
  255. }
  256. AFX_INLINE CPoint CXTPMarkupVisual::GetVisualOffset() const {
  257. return m_ptVisualOffset;
  258. }
  259. AFX_INLINE CSize CXTPMarkupUIElement::GetDesiredSize() const {
  260. return m_szDesiredSize;
  261. }
  262. AFX_INLINE CRect CXTPMarkupUIElement::GetFinalRect() const {
  263. return m_rcFinalRect;
  264. }
  265. AFX_INLINE XTPMarkupVisibility CXTPMarkupUIElement::GetVisibility() const {
  266. CXTPMarkupEnum* pValue =  MARKUP_STATICCAST(CXTPMarkupEnum, GetValue(m_pVisibilityProperty));
  267. return pValue ? (XTPMarkupVisibility)(int)*pValue : xtpMarkupVisibilityVisible;
  268. }
  269. AFX_INLINE void CXTPMarkupUIElement::SetVisibility(XTPMarkupVisibility visibility) {
  270. SetValue(m_pVisibilityProperty, CXTPMarkupEnum::CreateValue(visibility));
  271. }
  272. AFX_INLINE BOOL CXTPMarkupUIElement::IsFocusable() const {
  273. CXTPMarkupBool* pValue =  MARKUP_STATICCAST(CXTPMarkupBool, GetValue(m_pFocusableProperty));
  274. return pValue ? (BOOL)*pValue : FALSE;
  275. }
  276. AFX_INLINE BOOL CXTPMarkupUIElement::IsVisible() const {
  277. return GetVisibility() == xtpMarkupVisibilityVisible;
  278. }
  279. AFX_INLINE BOOL CXTPMarkupUIElement::IsEnabled() const {
  280. CXTPMarkupBool* pValue =  MARKUP_STATICCAST(CXTPMarkupBool, GetValue(m_pIsEnabledProperty));
  281. return pValue ? (BOOL)*pValue : TRUE;
  282. }
  283. #endif // !defined(__XTPMARKUPUIELEMENT_H__)