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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupBorder.h: interface for the CXTPMarkupBorder 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(__XTPMARKUPCONTEXT_H__)
  21. #define __XTPMARKUPCONTEXT_H__
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. class CXTPMarkupObject;
  26. class CXTPImageManager;
  27. class CXTPMarkupUIElement;
  28. class CXTPMarkupInputElement;
  29. class CXTPMarkupContext;
  30. class CXTPMarkupEventHandlerMap;
  31. class CXTPMarkupRoutedEventArgs;
  32. class CXTPMarkupRoutedEvent;
  33. class CXTPMarkupDelegate;
  34. class CXTPMarkupFont;
  35. class CXTPMarkupType;
  36. class CXTPMarkupKeyboardNavigation;
  37. class CXTPToolTipContext;
  38. class CXTPMarkupDelegateMap;
  39. class _XTP_EXT_CLASS CXTPMarkupContext
  40. {
  41. class CXTPMarkupFontArray;
  42. protected:
  43. class CInputElementCollection;
  44. public:
  45. CXTPMarkupContext();
  46. protected:
  47. virtual ~CXTPMarkupContext();
  48. public:
  49. LOGFONT* GetDefaultLogFont();
  50. COLORREF GetDefaultForeground();
  51. void SetDefaultTextColor(COLORREF clr);
  52. void SetDefaultFont(HFONT font);
  53. void SetDefaultFont(LOGFONT* pLogFont);
  54. CXTPMarkupUIElement* Parse(LPCSTR lpszBuffer);
  55. CXTPMarkupUIElement* Parse(LPCWSTR lpszBuffer);
  56. CXTPMarkupFont* GetFont(LOGFONT* pLogFont);
  57. static BOOL AFX_CDECL CompareFont(LOGFONT* pLogFont1, LOGFONT* pLogFont2);
  58. virtual BOOL OnWndMsg(CXTPMarkupUIElement* pUIElement, UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  59. void RaiseEvent(CXTPMarkupObject* pSource, CXTPMarkupRoutedEventArgs* pEventArgs);
  60. void AddHandler(CXTPMarkupRoutedEvent* pEvent, CXTPMarkupDelegate* pDelegate);
  61. void SetDelegate(LPWSTR lpszDelegate, CXTPMarkupDelegate* pDelegate);
  62. CXTPMarkupDelegate* LookupDelegate(LPCWSTR lpszDelegate) const;
  63. void CaptureMouse(CXTPMarkupInputElement* pUIElement);
  64. void ReleaseMouseCapture(CXTPMarkupInputElement* pUIElement);
  65. CXTPMarkupKeyboardNavigation* GetKeyboardNavigation() const;
  66. void Release();
  67. INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pToolInfo);
  68. private:
  69. void HandleMouseMove(CXTPMarkupUIElement* pUIElement, CPoint point);
  70. void HandleMouseEnter(CXTPMarkupInputElement* pUIElement, CPoint point);
  71. BOOL HandleSetCursor();
  72. BOOL HandleMouseWheel(int nDelta);
  73. BOOL HandleMouseUpDown(UINT message, WPARAM wParam, LPARAM lParam);
  74. void BuildInputList(CXTPMarkupObject* pUIElement, CInputElementCollection* list);
  75. BOOL IsVisualChild(CXTPMarkupObject* pParent, CXTPMarkupObject* pChild);
  76. CRect GetClientBoundingRect(CXTPMarkupInputElement* pUIElement);
  77. public:
  78. virtual void OnInvalidateVisual(CXTPMarkupUIElement* pUIElement);
  79. virtual void OnInvalidateArrange(CXTPMarkupUIElement* pUIElement);
  80. public:
  81. CXTPMarkupObject* CreateMarkupObject(CXTPMarkupType* pRuntimeClass);
  82. void FinalizeMarkupObject(CXTPMarkupInputElement* pInputElement);
  83. static void AFX_CDECL RegisterClasses();
  84. public:
  85. CXTPImageManager* m_pImageManager;
  86. HWND m_hContextWnd;
  87. protected:
  88. COLORREF m_clrForeground;
  89. LOGFONT m_logFont;
  90. CXTPMarkupInputElement* m_pMouseOver;
  91. CXTPMarkupInputElement* m_pMouseCapture;
  92. CXTPMarkupUIElement* m_pActiveElement;
  93. CXTPMarkupFontArray* m_pFonts;
  94. CXTPMarkupEventHandlerMap* m_pHandlers;
  95. CXTPMarkupDelegateMap* m_pDelegates;
  96. CXTPMarkupKeyboardNavigation* m_pKeyboardNavigation;
  97. CXTPToolTipContext* m_pTooltipContext;
  98. friend class CXTPMarkupFont;
  99. class CTooltipContext;
  100. long m_dwRef;
  101. };
  102. template<class TYPE>
  103. class CXTPMarkupTypedSimpleStack
  104. {
  105. public:
  106. CXTPMarkupTypedSimpleStack()
  107. {
  108. m_pHead = NULL;
  109. m_pTail = NULL;
  110. }
  111. BOOL IsEmpty() const
  112. {
  113. return m_pHead == NULL;
  114. }
  115. void AddTail(TYPE* pPart)
  116. {
  117. if (m_pTail != NULL)
  118. {
  119. m_pTail->m_pNextChain = pPart;
  120. }
  121. else
  122. {
  123. m_pTail = m_pHead = pPart;
  124. }
  125. m_pTail = pPart;
  126. }
  127. TYPE* RemoveHead()
  128. {
  129. ASSERT(m_pHead);
  130. if (!m_pHead)
  131. return NULL;
  132. TYPE* pHead = m_pHead;
  133. if (m_pHead == m_pTail)
  134. {
  135. m_pHead = m_pTail = NULL;
  136. }
  137. else
  138. {
  139. m_pHead = pHead->m_pNextChain;
  140. ASSERT(m_pHead);
  141. }
  142. pHead->m_pNextChain = NULL;
  143. return pHead;
  144. }
  145. void RemoveAll()
  146. {
  147. m_pHead = m_pTail = NULL;
  148. }
  149. TYPE* GetHead() const
  150. {
  151. return m_pHead;
  152. }
  153. TYPE* GetTail() const
  154. {
  155. return m_pTail;
  156. }
  157. BOOL Remove(TYPE* p)
  158. {
  159. ASSERT(p != NULL);
  160. if (!p)
  161. return FALSE;
  162. if (m_pHead == m_pTail)
  163. {
  164. if (p != m_pHead)
  165. return FALSE;
  166. p->m_pNextChain = NULL;
  167. m_pHead = m_pTail = NULL;
  168. return TRUE;
  169. }
  170. if (m_pHead == p)
  171. {
  172. m_pHead = p->m_pNextChain;
  173. p->m_pNextChain = NULL;
  174. return TRUE;
  175. }
  176. TYPE* pTest = m_pHead;
  177. while (pTest != NULL && pTest->m_pNextChain != p)
  178. pTest = pTest->m_pNextChain;
  179. if (pTest != NULL)
  180. {
  181. if (m_pTail == p) m_pTail = pTest;
  182. pTest->m_pNextChain = p->m_pNextChain;
  183. p->m_pNextChain = NULL;
  184. return TRUE;
  185. }
  186. return FALSE;
  187. }
  188. protected:
  189. TYPE* m_pHead;
  190. TYPE* m_pTail;
  191. };
  192. AFX_INLINE LOGFONT* CXTPMarkupContext::GetDefaultLogFont() {
  193. return &m_logFont;
  194. }
  195. AFX_INLINE COLORREF CXTPMarkupContext::GetDefaultForeground() {
  196. return m_clrForeground;
  197. }
  198. AFX_INLINE void CXTPMarkupContext::SetDefaultTextColor(COLORREF clr) {
  199. m_clrForeground = clr;
  200. }
  201. AFX_INLINE void CXTPMarkupContext::SetDefaultFont(HFONT font) {
  202. LOGFONT lf;
  203. GetObject(font, sizeof(LOGFONT), &lf);
  204. m_logFont = lf;
  205. }
  206. AFX_INLINE void CXTPMarkupContext::SetDefaultFont(LOGFONT* pLogFont) {
  207. m_logFont = *pLogFont;
  208. }
  209. AFX_INLINE CXTPMarkupKeyboardNavigation* CXTPMarkupContext::GetKeyboardNavigation() const {
  210. return m_pKeyboardNavigation;
  211. }
  212. #define MARKUP_CREATE(object_class, context) (object_class*)context->CreateMarkupObject(MARKUP_TYPE(object_class))
  213. #endif // !defined(__XTPMARKUPCONTEXT_H__)