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

对话框与窗口

开发平台:

Visual C++

  1. // ResourceManager.cpp: implementation of the CResourceManager 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. #include "stdafx.h"
  21. #include "Resource.h"
  22. #include "ResourceManager.h"
  23. #ifdef _DEBUG
  24. #undef THIS_FILE
  25. static char THIS_FILE[]=__FILE__;
  26. #define new DEBUG_NEW
  27. #endif
  28. struct STANDARDRESOURCE
  29. {
  30. LPCTSTR lpstrCaption;
  31. UINT nValue;
  32. };
  33. const STANDARDRESOURCE lpStandardResources[] =
  34. {
  35. _T("ID_FILE_NEW"),          ID_FILE_NEW,
  36. _T("ID_FILE_OPEN"),         ID_FILE_OPEN,
  37. _T("ID_FILE_CLOSE"),        ID_FILE_CLOSE,
  38. _T("ID_FILE_SAVE"),         ID_FILE_SAVE,
  39. _T("ID_FILE_SAVE_AS"),      ID_FILE_SAVE_AS,
  40. _T("ID_FILE_PRINT"),        ID_FILE_PRINT,
  41. _T("ID_APP_EXIT"),          ID_APP_EXIT,
  42. _T("ID_EDIT_UNDO"),         ID_EDIT_UNDO,
  43. _T("ID_EDIT_CUT"),          ID_EDIT_CUT,
  44. _T("ID_EDIT_COPY"),         ID_EDIT_COPY,
  45. _T("ID_EDIT_PASTE"),        ID_EDIT_PASTE,
  46. _T("ID_VIEW_STATUS_BAR"),   ID_VIEW_STATUS_BAR,
  47. _T("ID_WINDOW_CASCADE"),    ID_WINDOW_CASCADE,
  48. _T("ID_WINDOW_TILE_HORZ"),  ID_WINDOW_TILE_HORZ,
  49. _T("ID_WINDOW_ARRANGE"),    ID_WINDOW_ARRANGE,
  50. _T("ID_APP_ABOUT"),         ID_APP_ABOUT,
  51. _T("IDR_MENUBAR"),          1,
  52. _T("IDR_STANDARD"),         IDR_EMBEDDEDFRAME,
  53. _T("XTP_ID_WINDOWLIST"),        XTP_ID_WINDOWLIST,
  54. _T("XTP_ID_CUSTOMIZE"),         XTP_ID_CUSTOMIZE,
  55. _T("XTP_ID_TOOLBARLIST"),       ID_VIEW_TOOLBAR
  56. };
  57. //////////////////////////////////////////////////////////////////////
  58. // Construction/Destruction
  59. //////////////////////////////////////////////////////////////////////
  60. CResourceManager::CResourceManager()
  61. {
  62. m_nNextID = 1020;
  63. for (int i = 0; i < _countof(lpStandardResources); i++)
  64. {
  65. m_mapResources.SetAt(lpStandardResources[i].lpstrCaption, new CResourceInfo(lpStandardResources[i].nValue, TRUE));
  66. }
  67. }
  68. CResourceManager::~CResourceManager()
  69. {
  70. FreeAll();
  71. }
  72. void CResourceManager::FreeAll()
  73. {
  74. POSITION pos = m_mapResources.GetStartPosition();
  75. while (pos)
  76. {
  77. CResourceInfo* pInfo;
  78. CString strCaption;
  79. m_mapResources.GetNextAssoc(pos, strCaption, (CObject*&)pInfo);
  80. delete pInfo;
  81. }
  82. m_mapResources.RemoveAll();
  83. }
  84. UINT CResourceManager::GetNextID()
  85. {
  86. return m_nNextID++;
  87. }
  88. UINT CResourceManager::GetStringID(CString str)
  89. {
  90. CResourceInfo* pInfo;
  91. if (m_mapResources.Lookup(str, (CObject*&)pInfo))
  92. {
  93. return pInfo->m_nID;
  94. }
  95. REMOVE_S(str, _T(' '));
  96. if (str == _T("0")) return 0;
  97. if (str == _T("")) return 0;
  98. int i = _ttoi(str);
  99. CString strInteger;
  100. strInteger.Format(_T("%i"), i);
  101. if (strInteger == str)
  102. return i;
  103. UINT nId = GetNextID();
  104. m_mapResources.SetAt(str, new CResourceInfo(nId));
  105. return nId;
  106. }
  107. void CResourceManager::Set(UINT nID, CString str)
  108. {
  109. if (nID < 1)
  110. return;
  111. CResourceInfo* pInfo = Find(nID);
  112. if (pInfo)
  113. {
  114. if (pInfo->m_strCaption != str)
  115. {
  116. m_mapResources.RemoveKey(pInfo->m_strCaption);
  117. m_mapResources.SetAt(str, pInfo);
  118. pInfo->m_strCaption = str;
  119. }
  120. }
  121. else
  122. {
  123. m_mapResources.SetAt(str, new CResourceInfo(nID));
  124. }
  125. }
  126. CResourceInfo* CResourceManager::Find(UINT nID)
  127. {
  128. POSITION pos = m_mapResources.GetStartPosition();
  129. while (pos)
  130. {
  131. CResourceInfo* pInfo;
  132. CString strCaption;
  133. m_mapResources.GetNextAssoc(pos, strCaption, (CObject*&)pInfo);
  134. pInfo->m_strCaption = strCaption;
  135. if (pInfo->m_nID == nID) return pInfo;
  136. }
  137. return NULL;
  138. }
  139. CString CResourceManager::GetStringID(UINT nID)
  140. {
  141. if (nID == 0) return _T("");
  142. CResourceInfo* pInfo = Find(nID);
  143. if (pInfo)
  144. return pInfo->m_strCaption;
  145. CString strInteger;
  146. strInteger.Format(_T("%i"), nID);
  147. return strInteger == _T("-1")? _T(""): strInteger;
  148. }
  149. void CResourceManager::DoPropExchange(CXTPPropExchange* pPX)
  150. {
  151. PX_DWord(pPX, _T("NextId"), (DWORD&)m_nNextID, 1020);
  152. DWORD nCount = (DWORD)m_mapResources.GetCount();
  153. CXTPPropExchangeEnumeratorPtr pEnumerator(pPX->GetEnumerator(_T("Item")));
  154. POSITION posEnum = pEnumerator->GetPosition(nCount);
  155. if (pPX->IsStoring())
  156. {
  157. if (nCount == 0)
  158. return;  // nothing more to do
  159. POSITION pos = m_mapResources.GetStartPosition();
  160. while(pos)
  161. {
  162. CResourceInfo* pInfo;
  163. CString strCaption;
  164. m_mapResources.GetNextAssoc(pos, strCaption, (CObject*&)pInfo);
  165. CXTPPropExchangeSection secItem(pEnumerator->GetNext(posEnum));
  166. PX_String(&secItem, _T("Caption"), strCaption, _T(""));
  167. PX_Object(&secItem, pInfo, RUNTIME_CLASS(CResourceInfo));
  168. }
  169. }
  170. else
  171. {
  172. FreeAll();
  173. CString strCaption;
  174. CResourceInfo* pInfo = 0;
  175. while (posEnum)
  176. {
  177. CXTPPropExchangeSection secItem(pEnumerator->GetNext(posEnum));
  178. PX_String(&secItem, _T("Caption"), strCaption, _T(""));
  179. PX_Object(&secItem, pInfo, RUNTIME_CLASS(CResourceInfo));
  180. m_mapResources.SetAt(strCaption, pInfo);
  181. }
  182. }
  183. }
  184. void CResourceManager::Serialize(CArchive& ar)
  185. {
  186. if (ar.IsStoring())
  187. {
  188. ar << m_nNextID;
  189. }
  190. else
  191. {
  192. ar >> m_nNextID;
  193. FreeAll();
  194. }
  195. m_mapResources.Serialize(ar);
  196. }
  197. IMPLEMENT_SERIAL(CResourceInfo, CObject, 1)
  198. void CResourceInfo::Serialize(CArchive& ar)
  199. {
  200. m_strCaption = _T("");
  201. if (ar.IsStoring())
  202. {
  203. ar << m_nID;
  204. ar << m_bStandardResource;
  205. } else
  206. {
  207. ar >> m_nID;
  208. ar >> m_bStandardResource;
  209. }
  210. }
  211. void CResourceInfo::DoPropExchange(CXTPPropExchange* pPX)
  212. {
  213. m_strCaption = _T("");
  214. PX_DWord(pPX, _T("Id"), (DWORD&)m_nID, 0);
  215. PX_Bool(pPX, _T("Std"), m_bStandardResource, FALSE);
  216. }