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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupObject.h: interface for the CXTPMarkupObject 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(__XTPMARKUPOBJECT_H__)
  21. #define __XTPMARKUPOBJECT_H__
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. class CXTPMarkupDrawingContext;
  26. class CXTPMarkupDependencyProperty;
  27. class CXTPMarkupObject;
  28. class CXTPMarkupBuilder;
  29. class CXTPMarkupPropertyFromNameMap;
  30. class CXTPMarkupPropertyChangedEventArgs;
  31. class CXTPMarkupContext;
  32. class CXTPMarkupProperties;
  33. class CXTPMarkupType;
  34. class CXTPMarkupStyle;
  35. enum XTPMarkupTextAlignment
  36. {
  37. xtpMarkupTextAlignmentLeft,
  38. xtpMarkupTextAlignmentRight,
  39. xtpMarkupTextAlignmentCenter
  40. };
  41. enum XTPMarkupHorizontalAlignment
  42. {
  43. xtpMarkupHorizontalAlignmentLeft,
  44. xtpMarkupHorizontalAlignmentCenter,
  45. xtpMarkupHorizontalAlignmentRight,
  46. xtpMarkupHorizontalAlignmentStretch
  47. };
  48. enum XTPMarkupVerticalAlignment
  49. {
  50. xtpMarkupVerticalAlignmentTop,
  51. xtpMarkupVerticalAlignmentCenter,
  52. xtpMarkupVerticalAlignmentBottom,
  53. xtpMarkupVerticalAlignmentStretch
  54. };
  55. enum XTPMarkupOrientation
  56. {
  57. xtpMarkupOrientationHorizontal,
  58. xtpMarkupOrientationVertical
  59. };
  60. enum XTPMarkupBaselineAlignment
  61. {
  62. xtpMarkupBaselineTop,
  63. xtpMarkupBaselineCenter,
  64. xtpMarkupBaselineBottom,
  65. xtpMarkupBaseline,
  66. xtpMarkupBaselineTextTop,
  67. xtpMarkupBaselineTextBottom,
  68. xtpMarkupBaselineSubscript,
  69. xtpMarkupBaselineSuperscript
  70. };
  71. enum XTPMarkupVisibility
  72. {
  73. xtpMarkupVisibilityVisible = 0,
  74. xtpMarkupVisibilityHidden = 1,
  75. xtpMarkupVisibilityCollapsed = 2
  76. };
  77. typedef CXTPMarkupObject* (*PFNCONVERTFROM)(CXTPMarkupContext* pContext, CXTPMarkupObject* pObject);
  78. typedef void (*PFNPROPERTYCHANGED)(CXTPMarkupObject* d, CXTPMarkupPropertyChangedEventArgs* e);
  79. class _XTP_EXT_CLASS CXTPMarkupPropertyMetadata
  80. {
  81. public:
  82. enum MetadataFlags
  83. {
  84. flagInherited = 1,
  85. flagAffectsArrange = 2,
  86. flagAffectsMeasure = 4,
  87. flagAffectsParentArrange = 8,
  88. flagAffectsParentMeasure = 16,
  89. flagAffectsRender = 32,
  90. };
  91. public:
  92. CXTPMarkupPropertyMetadata(CXTPMarkupObject* pDefaultValue, DWORD dwFlags = 0);
  93. CXTPMarkupPropertyMetadata(CXTPMarkupObject* pDefaultValue, PFNCONVERTFROM pConverter, DWORD dwFlags = 0);
  94. CXTPMarkupPropertyMetadata(CXTPMarkupObject* pDefaultValue, PFNPROPERTYCHANGED pPropertyChanged, DWORD dwFlags = 0);
  95. CXTPMarkupPropertyMetadata(CXTPMarkupObject* pDefaultValue, PFNCONVERTFROM pConverter, PFNPROPERTYCHANGED pPropertyChanged, DWORD dwFlags = 0);
  96. virtual ~CXTPMarkupPropertyMetadata();
  97. public:
  98. CXTPMarkupObject* m_pDefaultValue;
  99. PFNCONVERTFROM m_pConverter;
  100. PFNPROPERTYCHANGED m_pPropertyChanged;
  101. DWORD m_dwFlags;
  102. friend class CXTPMarkupObject;
  103. };
  104. #define MARKUP_RELEASE(x) if (x) { x->Release(); x = 0;}
  105. #define MARKUP_ADDREF(x) if (x) { x->AddRef(); }
  106. #define MARKUP_TYPE(class_name) ((CXTPMarkupType*)(class_name::type##class_name))
  107. #define  DECLARE_MARKUPCLASS(class_name) 
  108. public: 
  109. static CXTPMarkupType* AFX_CDECL GetMarkupBaseType(); 
  110. static CXTPMarkupObject* AFX_CDECL CreateMarkupObject();
  111. static void AFX_CDECL RegisterMarkupClass(); 
  112. virtual CXTPMarkupType* GetType() const; 
  113. static void AFX_CDECL RegisterType(); 
  114. static const CXTPMarkupType* type##class_name; 
  115. #define  IMPLEMENT_MARKUPCLASS(class_tag, class_name, base_class_name) 
  116. CXTPMarkupObject* AFX_CDECL class_name::CreateMarkupObject() 
  117. { return new class_name; } 
  118. CXTPMarkupType* AFX_CDECL class_name::GetMarkupBaseType() 
  119. { return MARKUP_TYPE(base_class_name); } 
  120. const CXTPMarkupType* class_name::type##class_name = new CXTPMarkupType( 
  121. class_tag, L#class_name, &class_name::CreateMarkupObject, &class_name::GetMarkupBaseType, &class_name::RegisterMarkupClass); 
  122. CXTPMarkupType* class_name::GetType() const 
  123. { return MARKUP_TYPE(class_name); } 
  124. void AFX_CDECL class_name::RegisterType() { MARKUP_TYPE(class_name)->Register(); }
  125. #ifdef _DEBUG
  126. #define MARKUP_STATICCAST(class_name, object) 
  127. ((class_name*)CXTPMarkupType::StaticDownCast(MARKUP_TYPE(class_name), object))
  128. #else
  129. #define MARKUP_STATICCAST(class_name, object) ((class_name*)object)
  130. #endif
  131. #undef MARKUP_DYNAMICCAST
  132. #define MARKUP_DYNAMICCAST(class_name, object) 
  133. (class_name*)CXTPMarkupType::DynamicDownCast(MARKUP_TYPE(class_name), object)
  134. class _XTP_EXT_CLASS CXTPMarkupObject
  135. {
  136. DECLARE_MARKUPCLASS(CXTPMarkupObject);
  137. public:
  138. CXTPMarkupObject();
  139. protected:
  140. virtual ~CXTPMarkupObject();
  141. public:
  142. void SetValue(CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pValue);
  143. CXTPMarkupObject* GetValue(CXTPMarkupDependencyProperty* pProperty) const;
  144. CXTPMarkupObject* GetValueSource(CXTPMarkupDependencyProperty* pProperty) const;
  145. virtual CXTPMarkupObject* GetValueCore(CXTPMarkupDependencyProperty* pProperty) const;
  146. void SetLogicalParent(CXTPMarkupObject* pObject);
  147. CXTPMarkupObject* GetLogicalParent() const;
  148. BOOL IsKindOf(const CXTPMarkupType* pClass) const;
  149. public:
  150. DWORD AddRef();
  151. DWORD Release();
  152. public:
  153. virtual UINT GetHashKey() const;
  154. virtual BOOL IsEqual(const CXTPMarkupObject* pObject) const;
  155. BOOL operator==(const CXTPMarkupObject* pObject) const;
  156. public:
  157. CXTPMarkupObject* FindName(LPCWSTR lpszName);
  158. virtual int GetLogicalChildrenCount() const;
  159. virtual CXTPMarkupObject* GetLogicalChild(int nIndex) const;
  160. public:
  161. virtual void SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* pContent);
  162. virtual void SetPropertyObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pValue);
  163. virtual CXTPMarkupObject* ConvertFrom(CXTPMarkupObject* pObject) const;
  164. virtual BOOL HasContentObject() const;
  165. virtual BOOL AllowWhiteSpaceContent() const;
  166. protected:
  167. virtual void OnPropertyChanged(CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pOldValue, CXTPMarkupObject* pNewValue);
  168. void RecursePropertyChanged(CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pOldValue, CXTPMarkupObject* pNewValue);
  169. protected:
  170. virtual void OnFinalRelease();
  171. protected:
  172. CXTPMarkupObject* m_pLogicalParent;
  173. CXTPMarkupProperties* m_pProperties;
  174. LPWSTR m_lpMarkupTag;
  175. long m_dwRef;
  176. protected:
  177. friend class CXTPMarkupBuilder;
  178. friend class CXTPMarkupStyle;
  179. static CXTPMarkupDependencyProperty* m_pNameProperty;
  180. static CXTPMarkupDependencyProperty* m_pKeyProperty;
  181. friend class CXTPMarkupProperties;
  182. };
  183. typedef CXTPMarkupObject* CXTPMarkupObjectPtr;
  184. class _XTP_EXT_CLASS CXTPMarkupDependencyProperty : public CXTPMarkupObject
  185. {
  186. DECLARE_MARKUPCLASS(CXTPMarkupDependencyProperty);
  187. protected:
  188. CXTPMarkupDependencyProperty();
  189. public:
  190. virtual ~CXTPMarkupDependencyProperty();
  191. public:
  192. static CXTPMarkupDependencyProperty* Register(LPCWSTR lpszName, CXTPMarkupType* pPropetyType, CXTPMarkupType* pOwnerType, CXTPMarkupPropertyMetadata* pMetadata = NULL);
  193. static CXTPMarkupDependencyProperty* RegisterAttached(LPCWSTR lpszName, CXTPMarkupType* pPropetyType, CXTPMarkupType* pOwnerType, CXTPMarkupPropertyMetadata* pMetadata = NULL);
  194. CXTPMarkupDependencyProperty* AddOwner(CXTPMarkupType* pOwnerType);
  195. public:
  196. LPCWSTR GetName() const;
  197. CXTPMarkupType* GetPropetyType() const;
  198. CXTPMarkupType* GetOwnerType() const;
  199. CXTPMarkupPropertyMetadata* GetMetadata() const;
  200. BOOL IsAttached() const;
  201. virtual BOOL IsEvent() const;
  202. DWORD GetFlags() const;
  203. public:
  204. static CXTPMarkupDependencyProperty* AFX_CDECL FindProperty(CXTPMarkupType* pRuntimeClass, LPCWSTR lpszAttribute);
  205. protected:
  206. static CXTPMarkupPropertyFromNameMap* GetPropertyMap();
  207. static CXTPMarkupDependencyProperty* RegisterCommon(CXTPMarkupDependencyProperty* dp, LPCWSTR lpszName, CXTPMarkupType* pPropetyType, CXTPMarkupType* pOwnerType, BOOL bAttached);
  208. private:
  209. LPCWSTR m_lpszName;
  210. CXTPMarkupType* m_pPropetyType;
  211. CXTPMarkupType* m_pOwnerType;
  212. CXTPMarkupPropertyMetadata* m_pMetadata;
  213. BOOL m_bAttached;
  214. int m_nIndex;
  215. static int s_nCount;
  216. friend class CXTPMarkupBuilder;
  217. friend class CXTPMarkupRoutedEvent;
  218. friend class CXTPMarkupProperties;
  219. };
  220. class _XTP_EXT_CLASS CXTPMarkupPropertyChangedEventArgs
  221. {
  222. public:
  223. CXTPMarkupPropertyChangedEventArgs(CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pOldValue, CXTPMarkupObject* pNewValue);
  224. public:
  225. CXTPMarkupDependencyProperty* m_pProperty;
  226. CXTPMarkupObject* m_pOldValue;
  227. CXTPMarkupObject* m_pNewValue;
  228. };
  229. class _XTP_EXT_CLASS CXTPMarkupThickness : public CXTPMarkupObject
  230. {
  231. DECLARE_MARKUPCLASS(CXTPMarkupThickness);
  232. public:
  233. CXTPMarkupThickness(long uniformLength = 0);
  234. CXTPMarkupThickness(long l, long t, long r, long b);
  235. public:
  236. static CXTPMarkupThickness* AFX_CDECL CreateValue();
  237. public:
  238. SIZE Size()
  239. {
  240. SIZE sz = {left + right, top + bottom};
  241. return sz;
  242. }
  243. BOOL IsZero() const
  244. {
  245. return left == 0 && right == 0 && top == 0 && bottom == 0;
  246. }
  247. static CRect AFX_CDECL HelperDeflateRect(CRect rt, CXTPMarkupThickness* thick);
  248. public:
  249. CXTPMarkupObject* ConvertFrom(CXTPMarkupObject* pObject) const;
  250. public:
  251. virtual BOOL IsEqual(const CXTPMarkupObject* pObject) const;
  252. public:
  253. LONG left;
  254. LONG top;
  255. LONG right;
  256. LONG bottom;
  257. };
  258. class _XTP_EXT_CLASS CXTPMarkupInt : public CXTPMarkupObject
  259. {
  260. DECLARE_MARKUPCLASS(CXTPMarkupInt);
  261. public:
  262. CXTPMarkupInt(int nValue = 0);
  263. operator int() const {
  264. return m_nValue;
  265. }
  266. public:
  267. CXTPMarkupObject* ConvertFrom(CXTPMarkupObject* pObject) const;
  268. public:
  269. virtual BOOL IsEqual(const CXTPMarkupObject* pObject) const;
  270. protected:
  271. int m_nValue;
  272. };
  273. class _XTP_EXT_CLASS CXTPMarkupDouble : public CXTPMarkupObject
  274. {
  275. DECLARE_MARKUPCLASS(CXTPMarkupDouble);
  276. public:
  277. CXTPMarkupDouble(double dValue = 0);
  278. operator double() const {
  279. return m_dValue;
  280. }
  281. public:
  282. CXTPMarkupObject* ConvertFrom(CXTPMarkupObject* pObject) const;
  283. public:
  284. virtual BOOL IsEqual(const CXTPMarkupObject* pObject) const;
  285. protected:
  286. double m_dValue;
  287. };
  288. class _XTP_EXT_CLASS CXTPMarkupEnum : public CXTPMarkupObject
  289. {
  290. DECLARE_MARKUPCLASS(CXTPMarkupEnum);
  291. public:
  292. CXTPMarkupEnum(int nValue = 0);
  293. operator int() const {
  294. return m_nValue;
  295. }
  296. public:
  297. static CXTPMarkupEnum* AFX_CDECL CreateValue(int nValue);
  298. public:
  299. CXTPMarkupObject* ConvertFrom(CXTPMarkupObject* pObject) const;
  300. public:
  301. virtual BOOL IsEqual(const CXTPMarkupObject* pObject) const;
  302. protected:
  303. int m_nValue;
  304. };
  305. class _XTP_EXT_CLASS CXTPMarkupBool : public CXTPMarkupObject
  306. {
  307. DECLARE_MARKUPCLASS(CXTPMarkupBool);
  308. public:
  309. CXTPMarkupBool(BOOL bValue = FALSE);
  310. operator BOOL() const {
  311. return m_bValue;
  312. }
  313. public:
  314. static CXTPMarkupBool* AFX_CDECL CreateTrueValue();
  315. static CXTPMarkupBool* AFX_CDECL CreateFalseValue();
  316. public:
  317. CXTPMarkupObject* ConvertFrom(CXTPMarkupObject* pObject) const;
  318. public:
  319. virtual UINT GetHashKey() const;
  320. virtual BOOL IsEqual(const CXTPMarkupObject* pObject) const;
  321. protected:
  322. BOOL m_bValue;
  323. };
  324. class _XTP_EXT_CLASS CXTPMarkupColor : public CXTPMarkupObject
  325. {
  326. DECLARE_MARKUPCLASS(CXTPMarkupColor);
  327. public:
  328. CXTPMarkupColor(COLORREF nValue = 0);
  329. operator COLORREF() const {
  330. return m_nValue;
  331. }
  332. CXTPMarkupObject* ConvertFrom(CXTPMarkupObject* pObject) const;
  333. public:
  334. static BOOL AFX_CDECL ConvertFromString(LPCWSTR lpszValue, COLORREF& clr);
  335. public:
  336. virtual BOOL IsEqual(const CXTPMarkupObject* pObject) const;
  337. protected:
  338. void SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* /*pContent*/);
  339. protected:
  340. COLORREF m_nValue;
  341. };
  342. class _XTP_EXT_CLASS CXTPMarkupString : public CXTPMarkupObject
  343. {
  344. DECLARE_MARKUPCLASS(CXTPMarkupString);
  345. public:
  346. CXTPMarkupString(LPCWSTR lpszValue = NULL, int nLength = -1);
  347. private:
  348. ~CXTPMarkupString();
  349. public:
  350. operator LPCWSTR() const {
  351. return m_lpszValue;
  352. }
  353. int GetLength() const {
  354. return m_nLength;
  355. }
  356. public:
  357. static CXTPMarkupString* AFX_CDECL CreateValue(LPCWSTR lpszString, int nLength = -1);
  358. public:
  359. virtual UINT GetHashKey() const;
  360. virtual BOOL IsEqual(const CXTPMarkupObject* pObject) const;
  361. protected:
  362. LPWSTR m_lpszValue;
  363. int m_nLength;
  364. };
  365. class _XTP_EXT_CLASS CXTPMarkupType : public CXTPMarkupObject
  366. {
  367. DECLARE_MARKUPCLASS(CXTPMarkupType);
  368. protected:
  369. class CClassList;
  370. static CClassList* GetClassList();
  371. public:
  372. typedef CXTPMarkupObject* (AFX_CDECL* PFNCREATEOBJECT)();
  373. typedef CXTPMarkupType* (AFX_CDECL* PFNGETBASETYPE)();
  374. typedef void (AFX_CDECL* PFNREGISTERMARKUPCLASS)();
  375. CXTPMarkupObject* CreateObject() const;
  376. static void AFX_CDECL RegisterAll();
  377. public:
  378. CXTPMarkupType();
  379. CXTPMarkupType(LPCWSTR lpszTag, LPCWSTR lpszClassName, PFNCREATEOBJECT pfnCreateObject, PFNGETBASETYPE pfnGetBaseType, PFNREGISTERMARKUPCLASS pfnRegisterMarkupClass);
  380. private:
  381. ~CXTPMarkupType();
  382. public:
  383. BOOL IsDerivedFrom(const CXTPMarkupType* pBaseClass) const;
  384. static CXTPMarkupObject* AFX_CDECL DynamicDownCast(CXTPMarkupType* pType, CXTPMarkupObject* pObject);
  385. static CXTPMarkupObject* AFX_CDECL StaticDownCast(CXTPMarkupType* pType, CXTPMarkupObject* pObject);
  386. static CXTPMarkupType* AFX_CDECL LookupTag(LPCWSTR lpszTag);
  387. void Register();
  388. CXTPMarkupStyle* GetTypeStyle() const;
  389. void SetTypeStyle(CXTPMarkupStyle* pStyle);
  390. CXTPMarkupType* GetBaseType() const;
  391. protected:
  392. CXTPMarkupObject* ConvertFrom(CXTPMarkupObject* pObject) const;
  393. public:
  394. LPCWSTR m_lpszTag;
  395. LPCWSTR m_lpszClassName;
  396. CXTPMarkupType* m_pNextType;
  397. protected:
  398. BOOL m_bRegister;
  399. PFNCREATEOBJECT m_pfnCreateObject;
  400. PFNGETBASETYPE m_pfnGetBaseType;
  401. PFNREGISTERMARKUPCLASS m_pfnRegisterMarkupClass;
  402. CXTPMarkupStyle* m_pTypeStyle;
  403. };
  404. AFX_INLINE BOOL IsStringObject(CXTPMarkupObject* pObject)
  405. {
  406. return pObject && pObject->GetType() == MARKUP_TYPE(CXTPMarkupString);
  407. }
  408. class _XTP_EXT_CLASS CXTPMarkupCollection : public CXTPMarkupObject
  409. {
  410. DECLARE_MARKUPCLASS(CXTPMarkupCollection);
  411. public:
  412. CXTPMarkupCollection();
  413. ~CXTPMarkupCollection();
  414. public:
  415. int GetCount() const;
  416. void Add(CXTPMarkupObject* pElement);
  417. void RemoveAll();
  418. void Remove(int nIndex);
  419. int IndexOf(CXTPMarkupObject* pElement) const;
  420. public:
  421. void SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* pContent);
  422. BOOL HasContentObject() const;
  423. CXTPMarkupType* GetElementType() const;
  424. virtual int GetLogicalChildrenCount() const;
  425. virtual CXTPMarkupObject* GetLogicalChild(int nIndex) const;
  426. protected:
  427. virtual void OnItemAdded(CXTPMarkupObject* pItem, int nIndex);
  428. protected:
  429. CArray<CXTPMarkupObject*, CXTPMarkupObject*> m_arrItems;
  430. CXTPMarkupType* m_pElementType;
  431. BOOL m_bLogicalParent;
  432. };
  433. class CXTPMarkupProperties : public CXTPMarkupObject
  434. {
  435. public:
  436. CXTPMarkupProperties(CXTPMarkupObject* pOwner);
  437. ~CXTPMarkupProperties();
  438. public:
  439. BOOL IsPropertyValid(CXTPMarkupDependencyProperty* pProperty) const;
  440. CXTPMarkupObject* Lookup(CXTPMarkupDependencyProperty* pProperty) const;
  441. void Copy(CXTPMarkupProperties* pOwner);
  442. void Set(CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pValue);
  443. protected:
  444. CXTPMarkupObject** m_pTable;
  445. int m_nTableSize;
  446. CXTPMarkupObject* m_pOwner;
  447. };
  448. AFX_INLINE CXTPMarkupStyle* CXTPMarkupType::GetTypeStyle() const {
  449. return m_pTypeStyle;
  450. }
  451. AFX_INLINE int CXTPMarkupCollection::GetCount() const {
  452. return (int)m_arrItems.GetSize();
  453. }
  454. AFX_INLINE CXTPMarkupType* CXTPMarkupCollection::GetElementType() const {
  455. return m_pElementType;
  456. }
  457. AFX_INLINE  LPCWSTR CXTPMarkupDependencyProperty::GetName() const {
  458. return m_lpszName;
  459. }
  460. AFX_INLINE CXTPMarkupType* CXTPMarkupDependencyProperty::GetPropetyType() const {
  461. return m_pPropetyType;
  462. }
  463. AFX_INLINE CXTPMarkupType* CXTPMarkupDependencyProperty::GetOwnerType() const {
  464. return m_pOwnerType;
  465. }
  466. AFX_INLINE CXTPMarkupPropertyMetadata* CXTPMarkupDependencyProperty::GetMetadata() const {
  467. return m_pMetadata;
  468. }
  469. AFX_INLINE BOOL CXTPMarkupDependencyProperty::IsAttached() const {
  470. return m_bAttached;
  471. }
  472. AFX_INLINE BOOL CXTPMarkupDependencyProperty::IsEvent() const {
  473. return FALSE;
  474. }
  475. AFX_INLINE DWORD CXTPMarkupDependencyProperty::GetFlags() const {
  476. return m_pMetadata ? m_pMetadata->m_dwFlags : 0;
  477. }
  478. AFX_INLINE UINT CXTPMarkupObject::GetHashKey() const {
  479. return (UINT)(UINT_PTR)this;
  480. }
  481. AFX_INLINE BOOL CXTPMarkupObject::IsEqual(const CXTPMarkupObject* pObject) const {
  482. return pObject == this;
  483. }
  484. AFX_INLINE BOOL CXTPMarkupObject::operator==(const CXTPMarkupObject* pObject) const {
  485. return IsEqual(pObject);
  486. }
  487. AFX_INLINE bool AFXAPI operator==(const CXTPMarkupObject& s1, const CXTPMarkupObject& s2) {
  488. return s1.IsEqual(&s2) ? true : false;
  489. }
  490. template<> AFX_INLINE UINT AFXAPI HashKey(CXTPMarkupObject* key)
  491. {
  492. return key->GetHashKey();
  493. }
  494. template<> AFX_INLINE BOOL AFXAPI CompareElements(const CXTPMarkupObjectPtr* pElement1, const CXTPMarkupObjectPtr* pElement2)
  495. {
  496. return (*pElement1)->IsEqual(*pElement2);
  497. }
  498. AFX_INLINE BOOL IsEqual(CXTPMarkupObject* pNewValue, CXTPMarkupObject* pOldValue) {
  499. if (pNewValue == NULL && pOldValue == NULL)
  500. return TRUE;
  501. if (pNewValue != NULL || pOldValue != NULL)
  502. return FALSE;
  503. return pNewValue->IsEqual(pOldValue);
  504. }
  505. #endif // !defined(__XTPMARKUPOBJECT_H__)