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

对话框与窗口

开发平台:

Visual C++

  1. // XTPSkinManagerResource.cpp: implementation of the CXTPSkinManagerResourceFile class.
  2. //
  3. // This file is a part of the XTREME SKINFRAMEWORK 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 "Common/XTPVC50Helpers.h"
  22. #include "Common/XTPVC80Helpers.h"
  23. #include "XTPSkinManagerResource.h"
  24. #include "XTPSkinImage.h"
  25. #include "XTPSkinManager.h"
  26. #ifdef _DEBUG
  27. #undef THIS_FILE
  28. static char THIS_FILE[]=__FILE__;
  29. #define new DEBUG_NEW
  30. #endif
  31. CXTPSkinManagerResourceFile::CXTPSkinManagerResourceFile()
  32. {
  33. m_lpTextFile = m_lpTextFileEnd = NULL;
  34. m_hModule = NULL;
  35. m_pIniFile = NULL;
  36. m_pManager = NULL;
  37. m_hInstance = NULL;
  38. }
  39. CXTPSkinManagerResourceFile::~CXTPSkinManagerResourceFile()
  40. {
  41. Close();
  42. }
  43. void CXTPSkinManagerResourceFile::Close()
  44. {
  45. SAFE_DELETE(m_pIniFile);
  46. if (m_hModule)
  47. {
  48. if (m_hModule != m_hInstance) FreeLibrary(m_hModule);
  49. m_hModule = NULL;
  50. }
  51. }
  52. CXTPSkinManagerSchema* CXTPSkinManagerResourceFile::CreateSchema()
  53. {
  54. return new CXTPSkinManagerSchemaDefault(m_pManager);
  55. }
  56. CString CXTPSkinManagerResourceFile::GetDefaultIniFileName()
  57. {
  58. HRSRC hRsrc = FindResource(m_hModule, _T("THEMES_INI"), _T("TEXTFILE"));
  59. if (!hRsrc)
  60. return _T("");
  61. HGLOBAL hResData = LoadResource(m_hModule, hRsrc);
  62. if (!hResData)
  63. return _T("");
  64. LPWSTR lpwzThemes = (LPWSTR)LockResource(hResData);
  65. LPWSTR lpwzFile =  wcsstr(lpwzThemes, L"[File.");
  66. if (!lpwzFile)
  67. return _T("");
  68. LPWSTR pNextLine = wcschr(lpwzFile, L']');
  69. CString str = CONSTRUCT_S(lpwzFile + 6, (int)(pNextLine - lpwzFile) - 6);
  70. return str + _T("_ini");
  71. }
  72. BOOL CXTPSkinManagerResourceFile::Open(LPCTSTR lpszResourcePath, LPCTSTR lpszIniFileName)
  73. {
  74. Close();
  75. m_strResourcePath = lpszResourcePath;
  76. m_strIniFileName = lpszIniFileName;
  77. if (m_hInstance == NULL)
  78. {
  79. if (m_strResourcePath.IsEmpty())
  80. return FALSE;
  81. CString strFileName = m_strResourcePath + _T('\') + m_strIniFileName;
  82. if (!m_strIniFileName.IsEmpty() && FILEEXISTS_S(strFileName))
  83. {
  84. m_pIniFile = new CStdioFile;
  85. if (!m_pIniFile->Open(strFileName, CFile::modeRead))
  86. {
  87. SAFE_DELETE(m_pIniFile);
  88. return FALSE;
  89. }
  90. return TRUE;
  91. }
  92. m_hModule = LoadLibrary(lpszResourcePath);
  93. if (!m_hModule)
  94. {
  95. m_hModule = LoadLibraryEx(lpszResourcePath, NULL, LOAD_LIBRARY_AS_DATAFILE);
  96. }
  97. }
  98. else
  99. {
  100. m_hModule = m_strIniFileName.IsEmpty() ? NULL : m_hInstance;
  101. }
  102. if (!m_hModule)
  103. {
  104. return FALSE;
  105. }
  106. if (m_strIniFileName.IsEmpty())
  107. {
  108. m_strIniFileName = GetDefaultIniFileName();
  109. }
  110. CString strFilePath(m_strIniFileName);
  111. REPLACE_S(strFilePath, _T('.'), _T('_'));
  112. REPLACE_S(strFilePath, _T('\'), _T('_'));
  113. HRSRC hRsrc = FindResource(m_hModule, strFilePath, _T("TEXTFILE"));
  114. if (!hRsrc)
  115. return FALSE;
  116. HGLOBAL hResData = LoadResource(m_hModule, hRsrc);
  117. if (!hResData)
  118. return FALSE;
  119. m_lpTextFile = (LPWSTR)LockResource(hResData);
  120. m_lpTextFileEnd = m_lpTextFile + SizeofResource(m_hModule, hRsrc)/2;
  121. if (m_lpTextFile && m_lpTextFile[0] == 0xFEFF)
  122. m_lpTextFile++;
  123. return TRUE;
  124. }
  125. BOOL CXTPSkinManagerResourceFile::ReadString(CString& str)
  126. {
  127. if (m_pIniFile)
  128. {
  129. if (!m_pIniFile->ReadString(str))
  130. {
  131. m_pIniFile->Close();
  132. return FALSE;
  133. }
  134. return TRUE;
  135. }
  136. ASSERT(m_lpTextFile);
  137. if (!m_lpTextFile)
  138. return FALSE;
  139. LPWSTR pNextLine = wcschr(m_lpTextFile, L'r');
  140. if (pNextLine == NULL || pNextLine > m_lpTextFileEnd)
  141. return FALSE;
  142. str = CONSTRUCT_S(m_lpTextFile, (int)(pNextLine - m_lpTextFile));
  143. m_lpTextFile = pNextLine + 1;
  144. if (m_lpTextFile[0] == L'n') m_lpTextFile = m_lpTextFile + 1;
  145. return TRUE;
  146. }
  147. CXTPSkinImage* CXTPSkinManagerResourceFile::LoadImage(CString strImageFile)
  148. {
  149. CXTPSkinImage* pImage = NULL;
  150. if (m_pIniFile)
  151. {
  152. strImageFile = m_strResourcePath + _T('\') + strImageFile;
  153. if (!FILEEXISTS_S(strImageFile))
  154. return NULL;
  155. pImage = new CXTPSkinImage();
  156. if (!pImage->LoadFile(strImageFile))
  157. {
  158. delete pImage;
  159. return NULL;
  160. }
  161. }
  162. else
  163. {
  164. REPLACE_S(strImageFile, _T('.'), _T('_'));
  165. REPLACE_S(strImageFile, _T('\'), _T('_'));
  166. pImage = new CXTPSkinImage();
  167. if (!pImage->LoadFile(GetModuleHandle(), strImageFile))
  168. {
  169. delete pImage;
  170. return NULL;
  171. }
  172. }
  173. return pImage;
  174. }