RTXMLFile.h
上传用户:qhonly
上传日期:2013-06-10
资源大小:487k
文件大小:2k
源码类别:

界面编程

开发平台:

Visual C++

  1. #pragma once
  2. typedef struct _tagRTXmlItemData
  3. {
  4. CString KeyName;
  5. CString KeyValue;
  6. struct _tagRTXmlItemData* Next;
  7. }RTXmlItemData;
  8. class CRTXmlItem
  9. {
  10. public:
  11. CString ItemName;
  12. private:
  13. RTXmlItemData * ItemData;
  14. friend class CRTXmlFile;
  15. public:
  16. CRTXmlItem(LPCTSTR lpItemName)
  17. {
  18. if(lpItemName != NULL)ItemName = lpItemName;
  19. ItemData = NULL;
  20. }
  21. void SetKeyValue(LPCTSTR lpKeyName,DWORD KeyValue)
  22. {
  23. CString strKeyValue;
  24. strKeyValue.Format("%d",KeyValue);
  25. SetKeyValue(lpKeyName,strKeyValue);
  26. }
  27. void SetKeyValue(LPCTSTR lpKeyName,LPCTSTR lpKeyValue)
  28. {
  29. RTXmlItemData *pItem = ItemData;
  30. RTXmlItemData *pItemEnd = ItemData;
  31. while(pItem != NULL)
  32. {
  33. if(pItem->KeyName == lpKeyName)
  34. {
  35. pItem->KeyValue = lpKeyValue;
  36. return;
  37. }
  38.             pItemEnd = pItem;
  39. pItem = pItem->Next;
  40. }
  41. if(pItem == NULL)
  42. {
  43. if(pItemEnd == NULL)
  44. {
  45. ItemData = new RTXmlItemData;
  46. ItemData->Next = NULL;
  47. ItemData->KeyName = lpKeyName;
  48. ItemData->KeyValue = lpKeyValue;
  49. }
  50. else
  51. {
  52. pItemEnd->Next = new RTXmlItemData;
  53. pItemEnd = pItemEnd->Next;
  54. pItemEnd->Next = NULL;
  55. pItemEnd->KeyName = lpKeyName;
  56. pItemEnd->KeyValue = lpKeyValue;
  57. }
  58. }
  59. }
  60. LPCTSTR GetKeyValue(LPCTSTR lpKeyName)
  61. {
  62. RTXmlItemData *ptr = ItemData;
  63. while(ptr != NULL)
  64. {
  65. if(ptr->KeyName == lpKeyName)
  66. {
  67. return (LPCTSTR)ptr->KeyValue;
  68. }
  69. ptr = ptr->Next;
  70. }
  71. return NULL;
  72. }
  73. DWORD GetKeyValueInt(LPCTSTR lpKeyName)
  74. {
  75. LPCTSTR lpKeyVlaue = GetKeyValue(lpKeyName);
  76. if(lpKeyVlaue == NULL)return 0;
  77. return atol(lpKeyVlaue);
  78. }
  79. BOOL GetKeyValueBool(LPCTSTR lpKeyName)
  80. {
  81. return (BOOL)GetKeyValueInt(lpKeyName);
  82. }
  83. ~CRTXmlItem()
  84. {
  85. RTXmlItemData *temp = NULL;
  86. RTXmlItemData *ptr = ItemData;
  87. while(ptr != NULL)
  88. {
  89. temp = ptr;
  90. ptr = ptr->Next;
  91. delete temp;
  92. }
  93. }
  94. };
  95. class CRTXmlFile
  96. {
  97. public:
  98. CRTXmlFile(void);
  99. ~CRTXmlFile(void);
  100. private:
  101. CPtrArray m_ItemList;
  102. CString   m_FileName;
  103. public:
  104. CRTXmlItem* GetItem(LPCTSTR lpItemName);
  105. BOOL Open(LPCTSTR lpFileName);
  106. BOOL Save(LPCTSTR lpSaveFile = NULL);
  107. void AddItem(CRTXmlItem* pItem);
  108. CRTXmlItem* GetFirstItem();
  109. CRTXmlItem* GetNextItem();
  110. private:
  111. BOOL ParseItem(char * ptr,char** out);
  112. BOOL ParseKey(char* ptr,CRTXmlItem* pItem,char ** out);
  113. BOOL SkipBlank(char * ptr,char ** out);
  114. BOOL FindBlank(char* input, char ** out);
  115. int    m_NewPosition;
  116. void Clear();
  117. };