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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupInputElement.h: interface for the CXTPMarkupInputElement 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(__XTPMARKUPINPUT_H__)
  21. #define __XTPMARKUPINPUT_H__
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. #include "XTPMarkupObject.h"
  26. class CXTPMarkupContext;
  27. class CXTPMarkupTriggerCollection;
  28. class _XTP_EXT_CLASS CXTPMarkupRoutedEvent : public CXTPMarkupDependencyProperty
  29. {
  30. public:
  31. enum RoutingStrategy
  32. {
  33. routingDirect = 0,
  34. routingBubble = 1
  35. };
  36. protected:
  37. CXTPMarkupRoutedEvent();
  38. public:
  39. virtual BOOL IsEvent() const;
  40. public:
  41. static CXTPMarkupRoutedEvent* RegisterRoutedEvent(LPCWSTR lpszName, RoutingStrategy routingStrategy, CXTPMarkupType* pOwnerType);
  42. };
  43. class _XTP_EXT_CLASS CXTPMarkupRoutedEventArgs
  44. {
  45. public:
  46. CXTPMarkupRoutedEventArgs();
  47. CXTPMarkupRoutedEventArgs(CXTPMarkupRoutedEvent* pEvent, CXTPMarkupObject* pSource);
  48. public:
  49. CXTPMarkupRoutedEvent* GetEvent() const;
  50. BOOL IsHandled() const;
  51. void SetHandled();
  52. CXTPMarkupObject* GetSource() const;
  53. void SetSource(CXTPMarkupObject* pSource);
  54. protected:
  55. CXTPMarkupRoutedEvent* m_pEvent;
  56. CXTPMarkupObject* m_pSource;
  57. BOOL m_bHandled;
  58. friend class CXTPMarkupInputElement;
  59. };
  60. class _XTP_EXT_CLASS CXTPMarkupDelegate : public CXTPMarkupObject
  61. {
  62. public:
  63. CXTPMarkupDelegate()
  64. {
  65. }
  66. virtual void Execute(CXTPMarkupObject* /*pSender*/, CXTPMarkupRoutedEventArgs* /*pArgs*/)
  67. {
  68. ASSERT(FALSE);
  69. }
  70. };
  71. template<class T>
  72. class CXTPMarkupClassDelegate : public CXTPMarkupDelegate
  73. {
  74. public:
  75. typedef void (T::*ROUTEDEVENTHANDLER)(CXTPMarkupObject* pSender, CXTPMarkupRoutedEventArgs* pArgs);
  76. public:
  77. CXTPMarkupClassDelegate(T* pObject, ROUTEDEVENTHANDLER pHandler)
  78. {
  79. m_pObject = pObject;
  80. m_pHandler = pHandler;
  81. }
  82. virtual void Execute(CXTPMarkupObject* pSender, CXTPMarkupRoutedEventArgs* pArgs)
  83. {
  84. (m_pObject->*m_pHandler)(pSender, pArgs);
  85. }
  86. protected:
  87. T* m_pObject;
  88. ROUTEDEVENTHANDLER m_pHandler;
  89. };
  90. class CXTPMarkupFunctionDelegate : public CXTPMarkupDelegate
  91. {
  92. public:
  93. typedef void (*ROUTEDEVENTHANDLER)(CXTPMarkupObject* pSender, CXTPMarkupRoutedEventArgs* pArgs);
  94. public:
  95. CXTPMarkupFunctionDelegate(ROUTEDEVENTHANDLER pHandler)
  96. {
  97. m_pHandler = pHandler;
  98. }
  99. virtual void Execute(CXTPMarkupObject* pSender, CXTPMarkupRoutedEventArgs* pArgs)
  100. {
  101. (*m_pHandler)(pSender, pArgs);
  102. }
  103. protected:
  104. ROUTEDEVENTHANDLER m_pHandler;
  105. };
  106. template<class T, typename EVENTHANDLER>
  107. CXTPMarkupDelegate* CreateMarkupClassDelegate(T* pClass, EVENTHANDLER pfnDelegate)
  108. {
  109. return new CXTPMarkupClassDelegate<T>(pClass, (CXTPMarkupClassDelegate<T>::ROUTEDEVENTHANDLER)pfnDelegate);
  110. }
  111. template<typename EVENTHANDLER>
  112. CXTPMarkupDelegate* CreateMarkupFunctionDelegate(EVENTHANDLER pfnDelegate)
  113. {
  114. return new CXTPMarkupFunctionDelegate((CXTPMarkupFunctionDelegate::ROUTEDEVENTHANDLER)pfnDelegate);
  115. }
  116. class _XTP_EXT_CLASS CXTPMarkupEventHandlerMap
  117. {
  118. public:
  119. CXTPMarkupEventHandlerMap();
  120. ~CXTPMarkupEventHandlerMap();
  121. public:
  122. void Add(CXTPMarkupRoutedEvent* pEvent, CXTPMarkupDelegate* pDelegate);
  123. void RemoveAll();
  124. void Raise(CXTPMarkupObject* pSender, CXTPMarkupRoutedEventArgs* pEventArgs);
  125. protected:
  126. CMap<CXTPMarkupRoutedEvent*, CXTPMarkupRoutedEvent*, CPtrList*, CPtrList*> m_mapHandlers;
  127. };
  128. class _XTP_EXT_CLASS CXTPMarkupMouseEventArgs : public CXTPMarkupRoutedEventArgs
  129. {
  130. public:
  131. CXTPMarkupMouseEventArgs(CXTPMarkupRoutedEvent* pEvent);
  132. public:
  133. CPoint GetPosition(CXTPMarkupInputElement* relativeTo);
  134. public:
  135. HWND m_hWnd;
  136. CPoint m_point;
  137. };
  138. class _XTP_EXT_CLASS CXTPMarkupMouseWheelEventArgs : public CXTPMarkupMouseEventArgs
  139. {
  140. public:
  141. CXTPMarkupMouseWheelEventArgs();
  142. public:
  143. int m_nDelta;
  144. };
  145. class _XTP_EXT_CLASS CXTPMarkupQueryCursorEventArgs : public CXTPMarkupMouseEventArgs
  146. {
  147. public:
  148. CXTPMarkupQueryCursorEventArgs();
  149. public:
  150. HCURSOR m_hCursor;
  151. };
  152. class _XTP_EXT_CLASS CXTPMarkupMouseButtonEventArgs : public CXTPMarkupMouseEventArgs
  153. {
  154. public:
  155. CXTPMarkupMouseButtonEventArgs(CXTPMarkupRoutedEvent* pEvent);
  156. };
  157. class _XTP_EXT_CLASS CXTPMarkupInputElement : public CXTPMarkupObject
  158. {
  159. DECLARE_MARKUPCLASS(CXTPMarkupInputElement);
  160. protected:
  161. CXTPMarkupInputElement();
  162. ~CXTPMarkupInputElement();
  163. public:
  164. virtual void OnMouseLeave(CXTPMarkupMouseEventArgs* e);
  165. virtual void OnMouseEnter(CXTPMarkupMouseEventArgs* e);
  166. virtual void OnMouseMove(CXTPMarkupMouseEventArgs* e);
  167. virtual void OnQueryCursor(CXTPMarkupQueryCursorEventArgs* e);
  168. virtual void OnMouseLeftButtonUp(CXTPMarkupMouseButtonEventArgs* e);
  169. virtual void OnMouseRightButtonUp(CXTPMarkupMouseButtonEventArgs* e);
  170. virtual void OnMouseLeftButtonDown(CXTPMarkupMouseButtonEventArgs* e);
  171. virtual void OnMouseRightButtonDown(CXTPMarkupMouseButtonEventArgs* e);
  172. virtual void OnLostMouseCapture(CXTPMarkupMouseEventArgs* e);
  173. CXTPMarkupContext* GetMarkupContext() const;
  174. virtual void OnMouseWheel(CXTPMarkupMouseWheelEventArgs* e);
  175. void Apply();
  176. public:
  177. virtual CXTPMarkupInputElement* InputHitTest(CPoint point) const;
  178. BOOL IsMouseOver() const;
  179. CXTPMarkupObject* GetToolTip() const;
  180. public:
  181. void AddHandler(CXTPMarkupRoutedEvent* pEvent, CXTPMarkupDelegate* pDelegate);
  182. CXTPMarkupObject* FindResource(const CXTPMarkupObject* pKey) const;
  183. public:
  184. void Focus();
  185. BOOL IsKeyboardFocused() const;
  186. protected:
  187. void RaiseEvent(CXTPMarkupRoutedEventArgs* pEventArgs);
  188. protected:
  189. void CaptureMouse();
  190. void ReleaseMouseCapture();
  191. protected:
  192. void FireTriggers(CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pNewValue);
  193. BOOL AddStyleTriggers(CXTPMarkupStyle* pStyle, CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pNewValue);
  194. protected:
  195. void SetPropertyObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pValue);
  196. virtual void OnFinalRelease();
  197. virtual void OnApply();
  198. void ApplyTree(CXTPMarkupObject* pChild);
  199. static void AFX_CDECL OnStylePropertyChanged(CXTPMarkupObject* d, CXTPMarkupPropertyChangedEventArgs* /*e*/);
  200. virtual CXTPMarkupObject* GetValueCore(CXTPMarkupDependencyProperty* pProperty) const;
  201. protected:
  202. CXTPMarkupEventHandlerMap* m_pHandlers;
  203. CXTPMarkupContext* m_pMarkupContext;
  204. CXTPMarkupTriggerCollection* m_pActiveTriggers;
  205. CXTPMarkupProperties* m_pTriggerProperties;
  206. CXTPMarkupStyle* m_pStyleCache;
  207. public:
  208. static CXTPMarkupDependencyProperty* m_pCursorProperty;
  209. static CXTPMarkupDependencyProperty* m_pIsMouseOverProperty;
  210. static CXTPMarkupDependencyProperty* m_pStyleProperty;
  211. static CXTPMarkupDependencyProperty* m_pResourcesProperty;
  212. static CXTPMarkupDependencyProperty* m_pToolTipProperty;
  213. static CXTPMarkupDependencyProperty* m_pIsKeyboardFocusedProperty;
  214. static CXTPMarkupDependencyProperty* m_pIsFocusableProperty;
  215. static CXTPMarkupRoutedEvent* m_pMouseLeaveEvent;
  216. static CXTPMarkupRoutedEvent* m_pMouseEnterEvent;
  217. static CXTPMarkupRoutedEvent* m_pMouseLeftButtonUpEvent;
  218. static CXTPMarkupRoutedEvent* m_pMouseLeftButtonDownEvent;
  219. static CXTPMarkupRoutedEvent* m_pMouseRightButtonUpEvent;
  220. static CXTPMarkupRoutedEvent* m_pMouseRightButtonDownEvent;
  221. static CXTPMarkupRoutedEvent* m_pMouseMoveEvent;
  222. static CXTPMarkupRoutedEvent* m_pLostMouseCaptureEvent;
  223. private:
  224. friend class CXTPMarkupContext;
  225. };
  226. AFX_INLINE CXTPMarkupRoutedEvent* CXTPMarkupRoutedEventArgs::GetEvent() const {
  227. return m_pEvent;
  228. }
  229. AFX_INLINE BOOL CXTPMarkupRoutedEventArgs::IsHandled() const {
  230. return m_bHandled;
  231. }
  232. AFX_INLINE void CXTPMarkupRoutedEventArgs::SetHandled() {
  233. m_bHandled = TRUE;
  234. }
  235. AFX_INLINE BOOL CXTPMarkupRoutedEvent::IsEvent() const {
  236. return TRUE;
  237. }
  238. AFX_INLINE CXTPMarkupContext* CXTPMarkupInputElement::GetMarkupContext() const {
  239. return m_pMarkupContext;
  240. }
  241. AFX_INLINE CXTPMarkupObject* CXTPMarkupRoutedEventArgs::GetSource() const {
  242. return m_pSource;
  243. }
  244. AFX_INLINE void CXTPMarkupRoutedEventArgs::SetSource(CXTPMarkupObject* pSource) {
  245. m_pSource = pSource;
  246. }
  247. AFX_INLINE BOOL CXTPMarkupInputElement::IsMouseOver() const {
  248. CXTPMarkupBool* pValue = MARKUP_STATICCAST(CXTPMarkupBool, GetValue(m_pIsMouseOverProperty));
  249. return pValue ? (BOOL)*pValue : FALSE;
  250. }
  251. AFX_INLINE BOOL CXTPMarkupInputElement::IsKeyboardFocused() const {
  252. CXTPMarkupBool* pValue = MARKUP_STATICCAST(CXTPMarkupBool, GetValue(m_pIsKeyboardFocusedProperty));
  253. return pValue ? (BOOL)*pValue : FALSE;
  254. }
  255. AFX_INLINE CXTPMarkupObject* CXTPMarkupInputElement::GetToolTip() const {
  256. return GetValue(m_pToolTipProperty);
  257. }
  258. #endif // !defined(__XTPMARKUPINPUT_H__)