ResourceManager.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:6k
- // ResourceManager.cpp: implementation of the CResourceManager class.
- //
- // This file is a part of the XTREME TOOLKIT PRO MFC class library.
- // (c)1998-2008 Codejock Software, All Rights Reserved.
- //
- // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
- // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
- // CONSENT OF CODEJOCK SOFTWARE.
- //
- // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
- // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
- // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
- // SINGLE COMPUTER.
- //
- // CONTACT INFORMATION:
- // support@codejock.com
- // http://www.codejock.com
- //
- /////////////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "Resource.h"
- #include "ResourceManager.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #define new DEBUG_NEW
- #endif
- struct STANDARDRESOURCE
- {
- LPCTSTR lpstrCaption;
- UINT nValue;
- };
- const STANDARDRESOURCE lpStandardResources[] =
- {
- _T("ID_FILE_NEW"), ID_FILE_NEW,
- _T("ID_FILE_OPEN"), ID_FILE_OPEN,
- _T("ID_FILE_CLOSE"), ID_FILE_CLOSE,
- _T("ID_FILE_SAVE"), ID_FILE_SAVE,
- _T("ID_FILE_SAVE_AS"), ID_FILE_SAVE_AS,
- _T("ID_FILE_PRINT"), ID_FILE_PRINT,
- _T("ID_APP_EXIT"), ID_APP_EXIT,
- _T("ID_EDIT_UNDO"), ID_EDIT_UNDO,
- _T("ID_EDIT_CUT"), ID_EDIT_CUT,
- _T("ID_EDIT_COPY"), ID_EDIT_COPY,
- _T("ID_EDIT_PASTE"), ID_EDIT_PASTE,
- _T("ID_VIEW_STATUS_BAR"), ID_VIEW_STATUS_BAR,
- _T("ID_WINDOW_CASCADE"), ID_WINDOW_CASCADE,
- _T("ID_WINDOW_TILE_HORZ"), ID_WINDOW_TILE_HORZ,
- _T("ID_WINDOW_ARRANGE"), ID_WINDOW_ARRANGE,
- _T("ID_APP_ABOUT"), ID_APP_ABOUT,
- _T("IDR_MENUBAR"), 1,
- _T("IDR_STANDARD"), IDR_EMBEDDEDFRAME,
- _T("XTP_ID_WINDOWLIST"), XTP_ID_WINDOWLIST,
- _T("XTP_ID_CUSTOMIZE"), XTP_ID_CUSTOMIZE,
- _T("XTP_ID_TOOLBARLIST"), ID_VIEW_TOOLBAR
- };
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- CResourceManager::CResourceManager()
- {
- m_nNextID = 1020;
- for (int i = 0; i < _countof(lpStandardResources); i++)
- {
- m_mapResources.SetAt(lpStandardResources[i].lpstrCaption, new CResourceInfo(lpStandardResources[i].nValue, TRUE));
- }
- }
- CResourceManager::~CResourceManager()
- {
- FreeAll();
- }
- void CResourceManager::FreeAll()
- {
- POSITION pos = m_mapResources.GetStartPosition();
- while (pos)
- {
- CResourceInfo* pInfo;
- CString strCaption;
- m_mapResources.GetNextAssoc(pos, strCaption, (CObject*&)pInfo);
- delete pInfo;
- }
- m_mapResources.RemoveAll();
- }
- UINT CResourceManager::GetNextID()
- {
- return m_nNextID++;
- }
- UINT CResourceManager::GetStringID(CString str)
- {
- CResourceInfo* pInfo;
- if (m_mapResources.Lookup(str, (CObject*&)pInfo))
- {
- return pInfo->m_nID;
- }
- REMOVE_S(str, _T(' '));
- if (str == _T("0")) return 0;
- if (str == _T("")) return 0;
- int i = _ttoi(str);
- CString strInteger;
- strInteger.Format(_T("%i"), i);
- if (strInteger == str)
- return i;
- UINT nId = GetNextID();
- m_mapResources.SetAt(str, new CResourceInfo(nId));
- return nId;
- }
- void CResourceManager::Set(UINT nID, CString str)
- {
- if (nID < 1)
- return;
- CResourceInfo* pInfo = Find(nID);
-
- if (pInfo)
- {
- if (pInfo->m_strCaption != str)
- {
- m_mapResources.RemoveKey(pInfo->m_strCaption);
- m_mapResources.SetAt(str, pInfo);
- pInfo->m_strCaption = str;
- }
- }
- else
- {
- m_mapResources.SetAt(str, new CResourceInfo(nID));
- }
- }
- CResourceInfo* CResourceManager::Find(UINT nID)
- {
- POSITION pos = m_mapResources.GetStartPosition();
- while (pos)
- {
- CResourceInfo* pInfo;
- CString strCaption;
- m_mapResources.GetNextAssoc(pos, strCaption, (CObject*&)pInfo);
- pInfo->m_strCaption = strCaption;
- if (pInfo->m_nID == nID) return pInfo;
- }
- return NULL;
- }
- CString CResourceManager::GetStringID(UINT nID)
- {
- if (nID == 0) return _T("");
- CResourceInfo* pInfo = Find(nID);
- if (pInfo)
- return pInfo->m_strCaption;
- CString strInteger;
- strInteger.Format(_T("%i"), nID);
- return strInteger == _T("-1")? _T(""): strInteger;
- }
- void CResourceManager::DoPropExchange(CXTPPropExchange* pPX)
- {
- PX_DWord(pPX, _T("NextId"), (DWORD&)m_nNextID, 1020);
- DWORD nCount = (DWORD)m_mapResources.GetCount();
- CXTPPropExchangeEnumeratorPtr pEnumerator(pPX->GetEnumerator(_T("Item")));
- POSITION posEnum = pEnumerator->GetPosition(nCount);
- if (pPX->IsStoring())
- {
- if (nCount == 0)
- return; // nothing more to do
- POSITION pos = m_mapResources.GetStartPosition();
- while(pos)
- {
- CResourceInfo* pInfo;
- CString strCaption;
- m_mapResources.GetNextAssoc(pos, strCaption, (CObject*&)pInfo);
- CXTPPropExchangeSection secItem(pEnumerator->GetNext(posEnum));
- PX_String(&secItem, _T("Caption"), strCaption, _T(""));
- PX_Object(&secItem, pInfo, RUNTIME_CLASS(CResourceInfo));
- }
- }
- else
- {
- FreeAll();
- CString strCaption;
- CResourceInfo* pInfo = 0;
- while (posEnum)
- {
- CXTPPropExchangeSection secItem(pEnumerator->GetNext(posEnum));
- PX_String(&secItem, _T("Caption"), strCaption, _T(""));
- PX_Object(&secItem, pInfo, RUNTIME_CLASS(CResourceInfo));
- m_mapResources.SetAt(strCaption, pInfo);
- }
- }
- }
- void CResourceManager::Serialize(CArchive& ar)
- {
- if (ar.IsStoring())
- {
- ar << m_nNextID;
- }
- else
- {
- ar >> m_nNextID;
- FreeAll();
- }
- m_mapResources.Serialize(ar);
- }
- IMPLEMENT_SERIAL(CResourceInfo, CObject, 1)
- void CResourceInfo::Serialize(CArchive& ar)
- {
- m_strCaption = _T("");
- if (ar.IsStoring())
- {
- ar << m_nID;
- ar << m_bStandardResource;
- } else
- {
- ar >> m_nID;
- ar >> m_bStandardResource;
- }
- }
- void CResourceInfo::DoPropExchange(CXTPPropExchange* pPX)
- {
- m_strCaption = _T("");
- PX_DWord(pPX, _T("Id"), (DWORD&)m_nID, 0);
- PX_Bool(pPX, _T("Std"), m_bStandardResource, FALSE);
- }