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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupTextBlock.h: interface for the CXTPMarkupTextBlock 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(__XTPMARKUPTEXTBLOCK_H__)
  21. #define __XTPMARKUPTEXTBLOCK_H__
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. #include "XTPMarkupFrameworkElement.h"
  26. class CXTPMarkupBrush;
  27. class CXTPMarkupInlineCollection;
  28. class CXTPMarkupInline;
  29. class CXTPMarkupDrawingContext;
  30. enum XTPMarkupTextTrimming
  31. {
  32. xtpMarkupTextTrimmingNone,
  33. xtpMarkupTextTrimmingCharacterEllipsis,
  34. xtpMarkupTextTrimmingWordEllipsis,
  35. };
  36. class _XTP_EXT_CLASS CXTPMarkupTextBlock : public CXTPMarkupFrameworkElement
  37. {
  38. DECLARE_MARKUPCLASS(CXTPMarkupTextBlock)
  39. private:
  40. struct CLine;
  41. struct CLineIterator;
  42. struct CLinePart;
  43. class CLinePartList;
  44. class CLineList;
  45. protected:
  46. CXTPMarkupTextBlock();
  47. virtual ~CXTPMarkupTextBlock();
  48. public:
  49. void SetText(LPCWSTR lpszText);
  50. CString GetText() const;
  51. CXTPMarkupInlineCollection* GetInlines() const;
  52. void SetBackground(CXTPMarkupBrush* brush);
  53. CXTPMarkupBrush* GetBackground() const;
  54. void SetForeground(CXTPMarkupBrush* brush);
  55. CXTPMarkupBrush* GetForeground() const;
  56. void SetTextAlignment(XTPMarkupTextAlignment alignment);
  57. XTPMarkupTextAlignment GetTextAlignment() const;
  58. void SetTextWrapping(BOOL bTextWrapping);
  59. BOOL GetTextWrapping() const;
  60. void SetTextTrimming(XTPMarkupTextTrimming bTextTrimming);
  61. XTPMarkupTextTrimming GetTextTrimming() const;
  62. void SetPadding(int nLeft, int nTop, int nRight, int nBottom);
  63. void SetPadding(int nPadding);
  64. CXTPMarkupThickness* GetPadding() const;
  65. void SetFontSize(int nFontSize);
  66. int GetFontSize() const;
  67. void SetFontWeight(int nFontWeight);
  68. int GetFontWeight() const;
  69. void SetFontFamily(LPCWSTR lpszFontFamily);
  70. LPCWSTR GetFontFamily() const;
  71. void SetFontStyle(int nFontStyle);
  72. int GetFontStyle() const;
  73. void SetTextDecorations(int nTextDecorations);
  74. int GetTextDecorations() const;
  75. public:
  76. CXTPMarkupInline* GetFirstInline() const;
  77. public:
  78. virtual void SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* pContent);
  79. virtual BOOL HasContentObject() const;
  80. protected:
  81. virtual CSize MeasureOverride(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize);
  82. virtual CSize ArrangeOverride(CSize szFinal);
  83. virtual void OnRender(CXTPMarkupDrawingContext* pDC);
  84. virtual BOOL AllowWhiteSpaceContent() const;
  85. virtual void OnPropertyChanged(CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pOldValue, CXTPMarkupObject* pNewValue);
  86. virtual int GetLogicalChildrenCount() const;
  87. virtual CXTPMarkupObject* GetLogicalChild(int nIndex) const;
  88. CXTPMarkupInputElement* InputHitTestOverride(CPoint point) const;
  89. void InvalidateMeasureOverride(CXTPMarkupDrawingContext* pDC);
  90. private:
  91. void RemoveAllLines();
  92. void CloseLine(CLineIterator& li, int nWidth);
  93. void TrimLine(CLineIterator& li, int nWidth);
  94. void PushLinePart(CLineIterator& li, int nWidth, BOOL bAddToStack = TRUE);
  95. void CalculateLines(CXTPMarkupDrawingContext* pDC, int nWidth);
  96. void RenderTextDecorations(CXTPMarkupDrawingContext* pDC, CLinePart* part);
  97. int GetStackWidth(CLineIterator& li) const;
  98. protected:
  99. CXTPMarkupInlineCollection* m_pInlines;
  100. public:
  101. static CXTPMarkupDependencyProperty* m_pBackgroundProperty;
  102. static CXTPMarkupDependencyProperty* m_pForegroundProperty;
  103. static CXTPMarkupDependencyProperty* m_pTextWrappingProperty;
  104. static CXTPMarkupDependencyProperty* m_pTextTrimmingProperty;
  105. static CXTPMarkupDependencyProperty* m_pTextAlignmentProperty;
  106. static CXTPMarkupDependencyProperty* m_pTextDecorationsProperty;
  107. static CXTPMarkupDependencyProperty* m_pFontSizeProperty;
  108. static CXTPMarkupDependencyProperty* m_pFontWeightProperty;
  109. static CXTPMarkupDependencyProperty* m_pFontFamilyProperty;
  110. static CXTPMarkupDependencyProperty* m_pFontStyleProperty;
  111. static CXTPMarkupDependencyProperty* m_pPaddingProperty;
  112. static CXTPMarkupDependencyProperty* m_pTextProperty;
  113. static CXTPMarkupDependencyProperty* m_pFontQualityProperty;
  114. private:
  115. CLineList* m_pLineList;
  116. int m_nLastWidth;
  117. CSize m_szBlockSize;
  118. };
  119. AFX_INLINE CXTPMarkupInlineCollection* CXTPMarkupTextBlock::GetInlines() const {
  120. return m_pInlines;
  121. }
  122. AFX_INLINE void CXTPMarkupTextBlock::SetTextWrapping(BOOL bTextWrapping) {
  123. SetValue(m_pTextWrappingProperty, CXTPMarkupEnum::CreateValue(bTextWrapping ? 1 : 0));
  124. }
  125. AFX_INLINE BOOL CXTPMarkupTextBlock::GetTextWrapping() const {
  126. CXTPMarkupEnum* pTextWrapping = MARKUP_STATICCAST(CXTPMarkupEnum, GetValue(m_pTextWrappingProperty));
  127. return pTextWrapping != NULL ? (BOOL)*pTextWrapping : (BOOL)FALSE;
  128. }
  129. AFX_INLINE void CXTPMarkupTextBlock::SetTextTrimming(XTPMarkupTextTrimming bTextTrimming) {
  130. SetValue(m_pTextTrimmingProperty, CXTPMarkupEnum::CreateValue(bTextTrimming));
  131. }
  132. AFX_INLINE XTPMarkupTextTrimming CXTPMarkupTextBlock::GetTextTrimming() const {
  133. CXTPMarkupEnum* pTextTrimming = MARKUP_STATICCAST(CXTPMarkupEnum, GetValue(m_pTextTrimmingProperty));
  134. return pTextTrimming != NULL ? (XTPMarkupTextTrimming)(int)*pTextTrimming : (XTPMarkupTextTrimming)xtpMarkupTextTrimmingNone;
  135. }
  136. AFX_INLINE void CXTPMarkupTextBlock::SetPadding(int nLeft, int nTop, int nRight, int nBottom) {
  137. SetValue(m_pPaddingProperty, new CXTPMarkupThickness(nLeft, nTop, nRight, nBottom));
  138. }
  139. AFX_INLINE void CXTPMarkupTextBlock::SetPadding(int padding) {
  140. SetValue(m_pPaddingProperty, new CXTPMarkupThickness(padding));
  141. }
  142. AFX_INLINE CXTPMarkupThickness* CXTPMarkupTextBlock::GetPadding() const {
  143. return  MARKUP_STATICCAST(CXTPMarkupThickness, GetValue(m_pPaddingProperty));
  144. }
  145. AFX_INLINE int CXTPMarkupTextBlock::GetLogicalChildrenCount() const {
  146. return m_pInlines != NULL ? 1 : 0;
  147. }
  148. AFX_INLINE CXTPMarkupObject* CXTPMarkupTextBlock::GetLogicalChild(int nIndex) const {
  149. return nIndex == 0 ? (CXTPMarkupObject*)m_pInlines : NULL;
  150. }
  151. #endif // !defined(__XTPMARKUPTEXTBLOCK_H__)