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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupDrawingContext.h: interface for the CXTPMarkupDrawingContext 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(__XTPMARKUPDRAWINGCONTEXT_H__)
  21. #define __XTPMARKUPDRAWINGCONTEXT_H__
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. #include "XTPMarkupObject.h"
  26. class CXTPMarkupContext;
  27. class _XTP_EXT_CLASS CXTPMarkupBrush : public CXTPMarkupObject
  28. {
  29. DECLARE_MARKUPCLASS(CXTPMarkupBrush);
  30. public:
  31. CXTPMarkupObject* ConvertFrom(CXTPMarkupObject* pObject) const;
  32. public:
  33. virtual void FillRect(CXTPMarkupDrawingContext* pDC, CRect rc);
  34. virtual COLORREF GetHintColor() const;
  35. };
  36. class _XTP_EXT_CLASS CXTPMarkupSolidColorBrush : public CXTPMarkupBrush
  37. {
  38. DECLARE_MARKUPCLASS(CXTPMarkupSolidColorBrush);
  39. public:
  40. CXTPMarkupSolidColorBrush();
  41. CXTPMarkupSolidColorBrush(COLORREF clr);
  42. public:
  43. void FillRect(CXTPMarkupDrawingContext* pDC, CRect rc);
  44. COLORREF GetHintColor() const;
  45. public:
  46. BOOL IsEqual(const CXTPMarkupObject* pObject) const;
  47. protected:
  48. static CXTPMarkupDependencyProperty* m_pColorProperty;
  49. };
  50. class _XTP_EXT_CLASS CXTPMarkupGradientStop : public CXTPMarkupObject
  51. {
  52. DECLARE_MARKUPCLASS(CXTPMarkupGradientStop);
  53. public:
  54. CXTPMarkupGradientStop();
  55. CXTPMarkupGradientStop(COLORREF clr, double dOffset = 0);
  56. public:
  57. COLORREF GetColor() const;
  58. double GetOffset() const;
  59. protected:
  60. protected:
  61. static CXTPMarkupDependencyProperty* m_pColorProperty;
  62. static CXTPMarkupDependencyProperty* m_pOffsetProperty;
  63. };
  64. class _XTP_EXT_CLASS CXTPMarkupGradientStops : public CXTPMarkupCollection
  65. {
  66. public:
  67. CXTPMarkupGradientStops();
  68. public:
  69. CXTPMarkupGradientStop* GetItem(int nIndex) const;
  70. };
  71. class _XTP_EXT_CLASS CXTPMarkupPoint : public CXTPMarkupObject
  72. {
  73. DECLARE_MARKUPCLASS(CXTPMarkupPoint);
  74. public:
  75. CXTPMarkupPoint();
  76. CXTPMarkupPoint(double x, double y);
  77. public:
  78. CXTPMarkupPoint& operator=(const CXTPMarkupPoint& srcPoint);
  79. protected:
  80. CXTPMarkupObject* ConvertFrom(CXTPMarkupObject* pObject) const;
  81. public:
  82. double x;
  83. double y;
  84. };
  85. class _XTP_EXT_CLASS CXTPMarkupLinearGradientBrush : public CXTPMarkupBrush
  86. {
  87. public:
  88. struct GRADIENTSTOP
  89. {
  90. RGBQUAD clr;
  91. double dOffset;
  92. double dDiff;
  93. int nIndex;
  94. };
  95. DECLARE_MARKUPCLASS(CXTPMarkupLinearGradientBrush);
  96. public:
  97. CXTPMarkupLinearGradientBrush();
  98. CXTPMarkupLinearGradientBrush(CXTPMarkupGradientStops* pGradientStops);
  99. ~CXTPMarkupLinearGradientBrush();
  100. public:
  101. CXTPMarkupGradientStops* GetGradientStops() const;
  102. void SetStartPoint(double x, double y);
  103. void SetEndPoint(double x, double y);
  104. public:
  105. void FillRect(CXTPMarkupDrawingContext* pDC, CRect rc);
  106. protected:
  107. void SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* pContent);
  108. private:
  109. static int _cdecl _GradientStopCompare(const void *arg1, const void *arg2);
  110. protected:
  111. CXTPMarkupGradientStops* m_pGradientStops;
  112. public:
  113. static CXTPMarkupDependencyProperty* m_pStartPointProperty;
  114. static CXTPMarkupDependencyProperty* m_pEndPointProperty;
  115. };
  116. class _XTP_EXT_CLASS CXTPMarkupFont : public CXTPMarkupObject
  117. {
  118. public:
  119. CXTPMarkupFont();
  120. ~CXTPMarkupFont();
  121. public:
  122. HFONT m_hFont;
  123. LOGFONT m_lf;
  124. CXTPMarkupFont* m_pNextChain;
  125. CXTPMarkupContext* m_pMarkupContext;
  126. };
  127. class _XTP_EXT_CLASS CXTPMarkupDrawingContext
  128. {
  129. public:
  130. CXTPMarkupDrawingContext(HDC hDC);
  131. CXTPMarkupDrawingContext();
  132. public:
  133. virtual ~CXTPMarkupDrawingContext();
  134. protected:
  135. void Init();
  136. public:
  137. void DrawRectangle(CXTPMarkupBrush* pBrush, CRect rc);
  138. void DrawFrame(CXTPMarkupBrush* pBrush, CRect rc);
  139. void FillSolidRect(CRect rc, COLORREF clr);
  140. void SetFont(CXTPMarkupFont* pFont);
  141. HDC GetSafeHdc() const;
  142. CXTPMarkupContext* GetMarkupContext() const;
  143. HDC Detach();
  144. POINT TranslatePoint(const POINT& ptVisualOffset) const;
  145. void SetViewport(const POINT& ptVisualOffset);
  146. POINT OffsetViewport(const POINT& ptViewortOrg);
  147. RECT GetClipBox() const;
  148. HRGN SaveClipRegion();
  149. void RestoreClipRegion(HRGN hrgnClip);
  150. void IntersectClipRect(const RECT& rcLayoutClip);
  151. virtual BOOL IsPrinting() const;
  152. SIZE GetTextExtent(LPCWSTR lpszText, int nCount) const;
  153. virtual void DrawTextLine(LPCWSTR lpszText, UINT nCount, LPCRECT lpRect);
  154. protected:
  155. virtual HFONT SelectFontObject(HFONT hFont);
  156. virtual void SetViewportOrg(const POINT& ptViewortOrg);
  157. protected:
  158. HDC m_hDC;
  159. HDC m_hAttribDC;
  160. CXTPMarkupFont* m_pSelectedFont;
  161. HFONT m_hOldFont;
  162. SIZE m_sizeWinExt;
  163. SIZE m_sizeVpExt;
  164. POINT m_ptViewortOrg;
  165. CRect m_rcClipBox;
  166. BOOL m_bDeleteDC;
  167. };
  168. class _XTP_EXT_CLASS CXTPMarkupPrintingContext : public CXTPMarkupDrawingContext
  169. {
  170. public:
  171. CXTPMarkupPrintingContext(HDC hDC, HDC hAttribDC);
  172. public:
  173. virtual BOOL IsPrinting() const;
  174. virtual void DrawTextLine(LPCWSTR lpszText, UINT nCount, LPCRECT lpRect);
  175. protected:
  176. CSize ComputeDeltas(int& x, LPCWSTR lpszString, UINT &nCount,
  177. BOOL bTabbed, UINT nTabStops, LPINT lpnTabStops, int nTabOrigin,
  178. LPWSTR lpszOutputString, int* pnDxWidths, int& nRightFixup) const;
  179. int ComputeNextTab(int x, UINT nTabStops, LPINT lpnTabStops, int nTabOrigin, int nTabWidth) const;
  180. protected:
  181. };
  182. AFX_INLINE HDC CXTPMarkupDrawingContext::GetSafeHdc() const {
  183. return m_hDC;
  184. }
  185. AFX_INLINE BOOL CXTPMarkupDrawingContext::IsPrinting() const {
  186. return FALSE;
  187. }
  188. AFX_INLINE BOOL CXTPMarkupPrintingContext::IsPrinting() const {
  189. return TRUE;
  190. }
  191. AFX_INLINE RECT CXTPMarkupDrawingContext::GetClipBox() const {
  192. return m_rcClipBox;
  193. }
  194. AFX_INLINE CXTPMarkupGradientStops* CXTPMarkupLinearGradientBrush::GetGradientStops() const {
  195. return m_pGradientStops;
  196. }
  197. AFX_INLINE CXTPMarkupGradientStop* CXTPMarkupGradientStops::GetItem(int nIndex) const {
  198. return nIndex >= 0 && nIndex < m_arrItems.GetSize() ? (CXTPMarkupGradientStop*)m_arrItems[nIndex] : NULL;
  199. }
  200. #endif // !defined(__XTPMARKUPDRAWINGCONTEXT_H__)