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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupInline.h: interface for the CXTPMarkupInline 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(__XTPMARKUPINLINE_H__)
  21. #define __XTPMARKUPINLINE_H__
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. #include "XTPMarkupInputElement.h"
  26. #define MARKUP_POSITION_EOF (POSITION)(-1)
  27. #define MARKUP_POSITION_START (POSITION)(0)
  28. #define MARKUP_POSITION_END (POSITION)(1)
  29. class CXTPMarkupInlineCollection;
  30. class CXTPMarkupDrawingContext;
  31. class CXTPMarkupBrush;
  32. class CXTPMarkupUIElement;
  33. class CXTPMarkupBuilder;
  34. class CXTPMarkupTextBlock;
  35. class CXTPMarkupFont;
  36. class CXTPMarkupFrameworkElement;
  37. class CXTPMarkupStyle;
  38. class _XTP_EXT_CLASS CXTPMarkupFrameworkContentElement : public CXTPMarkupInputElement
  39. {
  40. DECLARE_MARKUPCLASS(CXTPMarkupFrameworkContentElement)
  41. protected:
  42. CXTPMarkupFrameworkContentElement();
  43. public:
  44. CXTPMarkupObject* GetTag() const;
  45. void SetTag(CXTPMarkupObject* pTag);
  46. public:
  47. CXTPMarkupInputElement* InputHitTest(CPoint point) const;
  48. CRect GetBoundRect() const;
  49. public:
  50. CXTPMarkupFrameworkElement* GetParent() const;
  51. protected:
  52. virtual void OnPropertyChanged(CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pOldValue, CXTPMarkupObject* pNewValue);
  53. static void AFX_CDECL OnStylePropertyChanged(CXTPMarkupObject* d, CXTPMarkupPropertyChangedEventArgs* e);
  54. public:
  55. static CXTPMarkupDependencyProperty* m_pTagProperty;
  56. };
  57. class _XTP_EXT_CLASS CXTPMarkupTextElement : public CXTPMarkupFrameworkContentElement
  58. {
  59. DECLARE_MARKUPCLASS(CXTPMarkupTextElement)
  60. protected:
  61. CXTPMarkupTextElement();
  62. virtual ~CXTPMarkupTextElement();
  63. public:
  64. void SetBackground(CXTPMarkupBrush* pBrush);
  65. void SetBackground(COLORREF clr);
  66. static void AFX_CDECL SetBackground(CXTPMarkupObject* pObject, CXTPMarkupBrush* pBrush);
  67. CXTPMarkupBrush* GetBackground() const;
  68. void SetForeground(CXTPMarkupBrush* pBrush);
  69. void SetForeground(COLORREF clr);
  70. static void AFX_CDECL SetForeground(CXTPMarkupObject* pObject, CXTPMarkupBrush* pBrush);
  71. CXTPMarkupBrush* GetForeground() const;
  72. void SetFontSize(int nFontSize);
  73. int GetFontSize() const;
  74. void SetFontWeight(int nFontWeight);
  75. int GetFontWeight() const;
  76. void SetFontFamily(LPCWSTR lpszFontFamily);
  77. LPCWSTR GetFontFamily() const;
  78. void SetFontStyle(int nFontStyle);
  79. int GetFontStyle() const;
  80. void SetTextDecorations(int nTextDecorations);
  81. int GetTextDecorations() const;
  82. public:
  83. static CXTPMarkupDependencyProperty* m_pBackgroundProperty;
  84. static CXTPMarkupDependencyProperty* m_pForegroundProperty;
  85. static CXTPMarkupDependencyProperty* m_pFontSizeProperty;
  86. static CXTPMarkupDependencyProperty* m_pFontWeightProperty;
  87. static CXTPMarkupDependencyProperty* m_pFontFamilyProperty;
  88. static CXTPMarkupDependencyProperty* m_pFontStyleProperty;
  89. static CXTPMarkupDependencyProperty* m_pTextDecorationsProperty;
  90. static CXTPMarkupDependencyProperty* m_pFontQualityProperty;
  91. };
  92. class _XTP_EXT_CLASS CXTPMarkupInline : public CXTPMarkupTextElement
  93. {
  94. DECLARE_MARKUPCLASS(CXTPMarkupInline)
  95. protected:
  96. CXTPMarkupInline();
  97. virtual ~CXTPMarkupInline();
  98. public:
  99. virtual CXTPMarkupInline* GetFirstInline() const;
  100. CXTPMarkupInline* GetNextInline() const;
  101. public:
  102. XTPMarkupBaselineAlignment GetBaselineAlignment() const;
  103. void SetBaselineAlignment(XTPMarkupBaselineAlignment nBaselineAlignment);
  104. public:
  105. virtual POSITION GetContentStartPosition() const;
  106. virtual void GetContentNextPosition(POSITION& pos) const;
  107. virtual BOOL IsWordBreakPosition(POSITION pos) const;
  108. virtual BOOL IsLineBreakPosition(POSITION pos) const;
  109. virtual BOOL IsWhiteSpacePosition(POSITION pos) const;
  110. virtual void Arrange(CRect rcFinalRect, POSITION posStart, POSITION posEnd);
  111. virtual CSize Measure(CXTPMarkupDrawingContext* pDC, POSITION posStart, POSITION posEnd);
  112. virtual void Render(CXTPMarkupDrawingContext* pDC, CRect rc, POSITION posStart, POSITION posEnd);
  113. virtual void PrepareMeasure(CXTPMarkupDrawingContext* pDC);
  114. virtual int GetBaseline() const;
  115. CXTPMarkupTextBlock* GetTextBlock() const;
  116. protected:
  117. int m_nIndex;
  118. public:
  119. static CXTPMarkupDependencyProperty* m_pBaselineAlignmentProperty;
  120. private:
  121. friend class CXTPMarkupInlineCollection;
  122. };
  123. class _XTP_EXT_CLASS CXTPMarkupRun : public CXTPMarkupInline
  124. {
  125. DECLARE_MARKUPCLASS(CXTPMarkupRun)
  126. protected:
  127. CXTPMarkupRun();
  128. virtual ~CXTPMarkupRun();
  129. protected:
  130. virtual void OnFinalRelease();
  131. public:
  132. CString GetText() const;
  133. void SetText(LPCWSTR lpszText);
  134. void SetText(CXTPMarkupString* pText);
  135. public:
  136. virtual POSITION GetContentStartPosition() const;
  137. virtual void GetContentNextPosition(POSITION& pos) const;
  138. virtual BOOL IsWordBreakPosition(POSITION pos) const;
  139. virtual BOOL IsLineBreakPosition(POSITION pos) const;
  140. virtual BOOL IsWhiteSpacePosition(POSITION pos) const;
  141. virtual CSize Measure(CXTPMarkupDrawingContext* pDC, POSITION posStart, POSITION posEnd);
  142. virtual void Render(CXTPMarkupDrawingContext* pDC, CRect rc, POSITION posStart, POSITION posEnd);
  143. protected:
  144. virtual void GetLogFont(LOGFONT* lf) const;
  145. protected:
  146. virtual void SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* pContent);
  147. virtual BOOL HasContentObject() const;
  148. virtual void PrepareMeasure(CXTPMarkupDrawingContext* pDC);
  149. protected:
  150. int m_nBaseline;
  151. virtual int GetBaseline() const;
  152. CXTPMarkupFont* m_pFont;
  153. public:
  154. static CXTPMarkupDependencyProperty* m_pTextProperty;
  155. };
  156. class _XTP_EXT_CLASS CXTPMarkupSpan : public CXTPMarkupInline
  157. {
  158. DECLARE_MARKUPCLASS(CXTPMarkupSpan)
  159. protected:
  160. CXTPMarkupSpan();
  161. ~CXTPMarkupSpan();
  162. public:
  163. CXTPMarkupInlineCollection* GetInlines() const;
  164. public:
  165. virtual CXTPMarkupInline* GetFirstInline() const;
  166. protected:
  167. virtual void SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* pContent);
  168. virtual BOOL HasContentObject() const;
  169. virtual BOOL AllowWhiteSpaceContent() const;
  170. virtual int GetLogicalChildrenCount() const;
  171. virtual CXTPMarkupObject* GetLogicalChild(int nIndex) const;
  172. protected:
  173. CXTPMarkupInlineCollection* m_pInlines;
  174. };
  175. class _XTP_EXT_CLASS CXTPMarkupBold : public CXTPMarkupSpan
  176. {
  177. DECLARE_MARKUPCLASS(CXTPMarkupBold)
  178. protected:
  179. CXTPMarkupBold();
  180. };
  181. class _XTP_EXT_CLASS CXTPMarkupHyperlink  : public CXTPMarkupSpan
  182. {
  183. DECLARE_MARKUPCLASS(CXTPMarkupHyperlink)
  184. protected:
  185. CXTPMarkupHyperlink();
  186. protected:
  187. virtual void OnMouseLeftButtonUp(CXTPMarkupMouseButtonEventArgs* e);
  188. virtual void OnMouseLeftButtonDown(CXTPMarkupMouseButtonEventArgs* e);
  189. protected:
  190. virtual void OnClick();
  191. protected:
  192. BOOL m_bPressed;
  193. public:
  194. static CXTPMarkupRoutedEvent* m_pClickEvent;
  195. };
  196. class _XTP_EXT_CLASS CXTPMarkupItalic  : public CXTPMarkupSpan
  197. {
  198. DECLARE_MARKUPCLASS(CXTPMarkupItalic)
  199. protected:
  200. CXTPMarkupItalic();
  201. };
  202. class _XTP_EXT_CLASS CXTPMarkupUnderline  : public CXTPMarkupSpan
  203. {
  204. DECLARE_MARKUPCLASS(CXTPMarkupUnderline)
  205. protected:
  206. CXTPMarkupUnderline();
  207. };
  208. class _XTP_EXT_CLASS CXTPMarkupInlineUIContainer : public CXTPMarkupInline
  209. {
  210. DECLARE_MARKUPCLASS(CXTPMarkupInlineUIContainer);
  211. protected:
  212. CXTPMarkupInlineUIContainer();
  213. CXTPMarkupInlineUIContainer(CXTPMarkupUIElement* pElement);
  214. ~CXTPMarkupInlineUIContainer();
  215. public:
  216. void SetChild(CXTPMarkupUIElement* pElement);
  217. CXTPMarkupUIElement* GetChild() const;
  218. public:
  219. virtual POSITION GetContentStartPosition() const;
  220. virtual void GetContentNextPosition(POSITION& pos) const;
  221. virtual BOOL IsWordBreakPosition(POSITION pos) const;
  222. virtual void Render(CXTPMarkupDrawingContext* pDC, CRect rc, POSITION posStart, POSITION posEnd);
  223. virtual CSize Measure(CXTPMarkupDrawingContext* pDC, POSITION posStart, POSITION posEnd);
  224. virtual void Arrange(CRect rcFinalRect, POSITION posStart, POSITION posEnd);
  225. protected:
  226. virtual BOOL HasContentObject() const;
  227. virtual void SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* pContent);
  228. virtual int GetLogicalChildrenCount() const;
  229. virtual CXTPMarkupObject* GetLogicalChild(int nIndex) const;
  230. CXTPMarkupInputElement* InputHitTest(CPoint point) const;
  231. protected:
  232. CXTPMarkupUIElement* m_pChild;
  233. };
  234. class _XTP_EXT_CLASS CXTPMarkupLineBreak : public CXTPMarkupRun
  235. {
  236. DECLARE_MARKUPCLASS(CXTPMarkupLineBreak);
  237. protected:
  238. CXTPMarkupLineBreak();
  239. };
  240. class _XTP_EXT_CLASS CXTPMarkupInlineCollection : public CXTPMarkupCollection
  241. {
  242. DECLARE_MARKUPCLASS(CXTPMarkupInlineCollection);
  243. public:
  244. CXTPMarkupInlineCollection();
  245. ~CXTPMarkupInlineCollection();
  246. public:
  247. CXTPMarkupInline* GetInline(int nIndex) const;
  248. protected:
  249. virtual void SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* pContent);
  250. virtual void OnItemAdded(CXTPMarkupObject* pItem, int nIndex);
  251. private:
  252. friend class CXTPMarkupInline;
  253. friend class CXTPMarkupSpan;
  254. friend class CXTPMarkupTextBlock;
  255. };
  256. //////////////////////////////////////////////////////////////////////////
  257. AFX_INLINE CXTPMarkupInline* CXTPMarkupInlineCollection::GetInline(int nIndex) const {
  258. return nIndex >= 0 && nIndex < m_arrItems.GetSize() ? (CXTPMarkupInline*)m_arrItems[nIndex] : NULL;
  259. }
  260. AFX_INLINE CXTPMarkupInlineCollection* CXTPMarkupSpan::GetInlines() const {
  261. return m_pInlines;
  262. }
  263. AFX_INLINE int CXTPMarkupSpan::GetLogicalChildrenCount() const {
  264. return m_pInlines ? 1 : 0;
  265. }
  266. AFX_INLINE CXTPMarkupObject* CXTPMarkupSpan::GetLogicalChild(int nIndex) const {
  267. return nIndex == 0 ? (CXTPMarkupObject*)m_pInlines : NULL;
  268. }
  269. AFX_INLINE int CXTPMarkupInlineUIContainer::GetLogicalChildrenCount() const {
  270. return m_pChild ? 1 : 0;
  271. }
  272. AFX_INLINE CXTPMarkupObject* CXTPMarkupInlineUIContainer::GetLogicalChild(int nIndex) const {
  273. return nIndex == 0 ? (CXTPMarkupObject*)m_pChild : NULL;
  274. }
  275. AFX_INLINE XTPMarkupBaselineAlignment CXTPMarkupInline::GetBaselineAlignment() const {
  276. CXTPMarkupEnum* pBaseline = MARKUP_STATICCAST(CXTPMarkupEnum, GetValue(m_pBaselineAlignmentProperty));
  277. return pBaseline ? (XTPMarkupBaselineAlignment)(int)*pBaseline : xtpMarkupBaseline;
  278. }
  279. AFX_INLINE void CXTPMarkupInline::SetBaselineAlignment(XTPMarkupBaselineAlignment nBaselineAlignment) {
  280. SetValue(m_pBaselineAlignmentProperty, CXTPMarkupEnum::CreateValue(nBaselineAlignment));
  281. }
  282. AFX_INLINE void CXTPMarkupFrameworkContentElement::SetTag(CXTPMarkupObject* pTag) {
  283. SetValue(m_pTagProperty, pTag);
  284. }
  285. AFX_INLINE CXTPMarkupObject* CXTPMarkupFrameworkContentElement::GetTag() const {
  286. return GetValue(m_pTagProperty);
  287. }
  288. #endif // !defined(__XTPMARKUPINLINE_H__)