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

对话框与窗口

开发平台:

Visual C++

  1. // XTRegistryManager.h : header file
  2. //
  3. // This file is a part of the XTREME CONTROLS 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. //{{AFX_CODEJOCK_PRIVATE
  21. #ifndef __XTREGISTRYMANAGER_H__
  22. #define __XTREGISTRYMANAGER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. //===========================================================================
  28. // Summary:
  29. //     CXTRegistryManager is a stand alone registry management class. You
  30. //     can use it to read and write values from your system's registry or an
  31. //     .INI file. Use CXTRegistryManager to read and write string, integer,
  32. //     and binary data to and from the registry. You can also specify an .INI
  33. //     file name, and have these values stored there instead.
  34. //===========================================================================
  35. class _XTP_EXT_CLASS CXTRegistryManager
  36. {
  37. private:
  38. class CHKey;
  39. public:
  40. //-----------------------------------------------------------------------
  41. // Summary:
  42. //     Constructs a CXTRegistryManager object
  43. // Parameters:
  44. //     hKeyBase - Current key to be used in the registry.
  45. //-----------------------------------------------------------------------
  46. CXTRegistryManager(HKEY hKeyBase = HKEY_CURRENT_USER);
  47. //-----------------------------------------------------------------------
  48. // Summary:
  49. //     Destroys a CXTRegistryManager object, handles cleanup and deallocation
  50. //-----------------------------------------------------------------------
  51. virtual ~CXTRegistryManager();
  52. protected:
  53. HKEY     m_hKeyBase;        // Handle to the registry key to use. The default is HKEY_CURRENT_USER.
  54. LPCTSTR  m_pszRegistryKey;  // Used to determine the full registry key for storing application profile settings.
  55. LPCTSTR  m_pszProfileName;  // The application's .INI filename.
  56. static CString m_strINIFileName;  // Name of an .INI file for registry settings.
  57. public:
  58. //-----------------------------------------------------------------------
  59. // Summary:
  60. //     This member function will set the .INI file name for the registry
  61. //     manager to use instead of the system registry.
  62. // Parameters:
  63. //     strINIFileName - Full path to the .INI file.
  64. //-----------------------------------------------------------------------
  65. static void AFX_CDECL SetINIFileName(LPCTSTR strINIFileName);
  66. //-----------------------------------------------------------------------
  67. // Summary:
  68. //     This member function will return the file name of the .INI file
  69. //     used by the registry manager.
  70. // Returns:
  71. //     A reference to the CString object that contains the INI file path.
  72. //-----------------------------------------------------------------------
  73. static CString& AFX_CDECL GetINIFileName();
  74. //-----------------------------------------------------------------------
  75. // Summary:
  76. //     Call this member function to write the specified INT value into
  77. //     the specified section of the application's registry or .INI file.
  78. // Parameters:
  79. //     lpszSection - Points to a null-terminated string that specifies the section
  80. //                   containing the entry. If the section does not exist, it is created.
  81. //                   The name of the section is case independent. The string may be any
  82. //                   combination of uppercase and lowercase letters.
  83. //     lpszEntry   - Points to a null-terminated string that contains the entry into
  84. //                   which the value is to be written. If the entry does not exist in
  85. //                   the specified section, it is created.
  86. //     nValue      - Contains the value to be written.
  87. // Returns:
  88. //     Nonzero if successful, otherwise returns zero. If the user does not have
  89. //     access rights to modify the system registry will return -1.
  90. //-----------------------------------------------------------------------
  91. BOOL WriteProfileInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nValue);
  92. //-----------------------------------------------------------------------
  93. // Summary:
  94. //     Call this member function to write the specified binary value into
  95. //     the specified section of the application's registry or .INI file.
  96. // Parameters:
  97. //     lpszSection - Points to a null-terminated string that specifies the section
  98. //                   containing the entry. If the section does not exist, it is created.
  99. //                   The name of the section is case independent. The string may be any
  100. //                   combination of uppercase and lowercase letters.
  101. //     lpszEntry   - Points to a null-terminated string that contains the entry into
  102. //                   which the value is to be written. If the entry does not exist in
  103. //                   the specified section, it is created.
  104. //     pData       - Contains the value to be written.
  105. //     nBytes      - Contains the size of the value to be written.
  106. // Returns:
  107. //     Nonzero if successful, otherwise returns zero. If the user does not have
  108. //     access rights to modify the system registry will return -1.
  109. //-----------------------------------------------------------------------
  110. BOOL WriteProfileBinary(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPBYTE pData, UINT nBytes);
  111. //-----------------------------------------------------------------------
  112. // Summary:
  113. //     Call this member function to write the specified string value into
  114. //     the specified section of the application's registry or .INI file.
  115. // Parameters:
  116. //     lpszSection - Points to a null-terminated string that specifies the section
  117. //                   containing the entry. If the section does not exist, it is created.
  118. //                   The name of the section is case independent. The string may be any
  119. //                   combination of uppercase and lowercase letters.
  120. //     lpszEntry   - Points to a null-terminated string that contains the entry into
  121. //                   which the value is to be written. If the entry does not exist in
  122. //                   the specified section, it is created.
  123. //     lpszValue   - Contains the value to be written.
  124. // Returns:
  125. //     Nonzero if successful, otherwise returns zero. If the user does not have
  126. //     access rights to modify the system registry will return -1.
  127. //-----------------------------------------------------------------------
  128. BOOL WriteProfileString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue);
  129. //-----------------------------------------------------------------------
  130. // Summary:
  131. //     Call this member function to write the specified CPoint value into
  132. //     the specified section of the application's registry or .INI file.
  133. // Parameters:
  134. //     lpszSection - Points to a null-terminated string that specifies the section
  135. //                   containing the entry. If the section does not exist, it is created.
  136. //                   The name of the section is case independent. The string may be any
  137. //                   combination of uppercase and lowercase letters.
  138. //     lpszEntry   - Points to a null-terminated string that contains the entry into
  139. //                   which the value is to be written. If the entry does not exist in
  140. //                   the specified section, it is created.
  141. //     pValue      - Contains the value to be written.
  142. // Returns:
  143. //     Nonzero if successful, otherwise returns zero. If the user does not have
  144. //     access rights to modify the system registry will return -1.
  145. //-----------------------------------------------------------------------
  146. BOOL WriteProfilePoint(LPCTSTR lpszSection, LPCTSTR lpszEntry, CPoint* pValue);
  147. //-----------------------------------------------------------------------
  148. // Summary:
  149. //     Call this member function to write the specified CRect value into
  150. //     the specified section of the application's registry or .INI file.
  151. // Parameters:
  152. //     lpszSection - Points to a null-terminated string that specifies the section
  153. //                   containing the entry. If the section does not exist, it is created.
  154. //                   The name of the section is case independent. The string may be any
  155. //                   combination of uppercase and lowercase letters.
  156. //     lpszEntry   - Points to a null-terminated string that contains the entry into
  157. //                   which the value is to be written. If the entry does not exist in
  158. //                   the specified section, it is created.
  159. //     pValue      - Contains the value to be written.
  160. // Returns:
  161. //     Nonzero if successful, otherwise returns zero. If the user does not have
  162. //     access rights to modify the system registry will return -1.
  163. //-----------------------------------------------------------------------
  164. BOOL WriteProfileRect(LPCTSTR lpszSection, LPCTSTR lpszEntry, CRect* pValue);
  165. //-----------------------------------------------------------------------
  166. // Summary:
  167. //     Call this member function to write the specified CSize value into
  168. //     the specified section of the application's registry or .INI file.
  169. // Parameters:
  170. //     lpszSection - Points to a null-terminated string that specifies the section
  171. //                   containing the entry. If the section does not exist, it is created.
  172. //                   The name of the section is case independent. The string may be any
  173. //                   combination of uppercase and lowercase letters.
  174. //     lpszEntry   - Points to a null-terminated string that contains the entry into
  175. //                   which the value is to be written. If the entry does not exist in
  176. //                   the specified section, it is created.
  177. //     pValue      - Contains the value to be written.
  178. // Returns:
  179. //     Nonzero if successful, otherwise returns zero. If the user does not have
  180. //     access rights to modify the system registry will return -1.
  181. //-----------------------------------------------------------------------
  182. BOOL WriteProfileSize(LPCTSTR lpszSection, LPCTSTR lpszEntry, CSize* pValue);
  183. //-----------------------------------------------------------------------
  184. // Summary:
  185. //     Call this member function to write the specified double/float value
  186. //     into the specified section of the application's registry or .INI file.
  187. // Parameters:
  188. //     lpszSection - Points to a null-terminated string that specifies the section
  189. //                   containing the entry. If the section does not exist, it is created.
  190. //                   The name of the section is case independent. The string may be any
  191. //                   combination of uppercase and lowercase letters.
  192. //     lpszEntry   - Points to a null-terminated string that contains the entry into
  193. //                   which the value is to be written. If the entry does not exist in
  194. //                   the specified section, it is created.
  195. //     pValue      - Contains the value to be written.
  196. // Returns:
  197. //     Nonzero if successful, otherwise returns zero. If the user does not have
  198. //     access rights to modify the system registry will return -1.
  199. //-----------------------------------------------------------------------
  200. BOOL WriteProfileDouble(LPCTSTR lpszSection, LPCTSTR lpszEntry, double* pValue);
  201. //-----------------------------------------------------------------------
  202. // Summary:
  203. //     Call this member function to write the specified DWORD value into
  204. //     the specified section of the application's registry or .INI file.
  205. // Parameters:
  206. //     lpszSection - Points to a null-terminated string that specifies the section
  207. //                   containing the entry. If the section does not exist, it is created.
  208. //                   The name of the section is case independent. The string may be any
  209. //                   combination of uppercase and lowercase letters.
  210. //     lpszEntry   - Points to a null-terminated string that contains the entry into
  211. //                   which the value is to be written. If the entry does not exist in
  212. //                   the specified section, it is created.
  213. //     pValue      - Contains the value to be written.
  214. //
  215. //          Note that as COLORREF is a typedef for a DWORD, WriteProfileColor calls
  216. //          this function.
  217. // Returns:
  218. //     Nonzero if successful, otherwise returns zero. If the user does not have
  219. //     access rights to modify the system registry will return -1.
  220. //-----------------------------------------------------------------------
  221. BOOL WriteProfileDword(LPCTSTR lpszSection, LPCTSTR lpszEntry, DWORD* pValue);
  222. //-----------------------------------------------------------------------
  223. // Summary:
  224. //     Call this member function to write the specified COLORREF value
  225. //     into the specified section of the application's registry or .INI file.
  226. // Parameters:
  227. //     lpszSection - Points to a null-terminated string that specifies the section
  228. //                   containing the entry. If the section does not exist, it is created.
  229. //                   The name of the section is case independent. The string may be any
  230. //                   combination of uppercase and lowercase letters.
  231. //     lpszEntry   - Points to a null-terminated string that contains the entry into
  232. //                   which the value is to be written. If the entry does not exist in
  233. //                   the specified section, it is created.
  234. //     pValue      - Contains the value to be written.
  235. //
  236. //          Note that because COLORREF is a typedef for a DWORD, this function only
  237. //          calls WriteProfileDword.
  238. // Returns:
  239. //     Nonzero if successful, otherwise returns zero. If the user does not have
  240. //     access rights to modify the system registry will return -1.
  241. //-----------------------------------------------------------------------
  242. BOOL WriteProfileColor(LPCTSTR lpszSection, LPCTSTR lpszEntry, COLORREF* pValue);
  243. //-----------------------------------------------------------------------
  244. // Summary:
  245. //     Call this member function to retrieve the value of an integer from
  246. //     an entry within a specified section of the application's registry or
  247. //     .INI file.
  248. // Parameters:
  249. //     lpszSection - Points to a null-terminated string that specifies the section
  250. //                   containing the entry.
  251. //     lpszEntry   - Points to a null-terminated string that contains the entry whose
  252. //                   value is to be retrieved.
  253. //     nDefault    - Specifies the default value to return if the framework cannot
  254. //                   find the entry. This value can be an unsigned value in the range 0
  255. //                   through 65, 535 or a signed value in the range -32, 768 through 32, 767.
  256. //
  257. //          This member function supports hexadecimal notation for the value
  258. //          in the .INI file. When you retrieve a signed integer, you should cast
  259. //          the value into an int.
  260. // Returns:
  261. //     The integer value of the string that follows the
  262. //     specified entry if the function is successful. The return value is
  263. //     the value of the 'nDefault' parameter if the function does not find the
  264. //     entry. The return value is zero if the value that corresponds to the
  265. //     specified entry is not an integer.
  266. //-----------------------------------------------------------------------
  267. UINT GetProfileInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault);
  268. //-----------------------------------------------------------------------
  269. // Summary:
  270. //     Call this member function to retrieve the binary value from an entry
  271. //     within a specified section of the application's registry or .INI file.
  272. // Parameters:
  273. //     lpszSection - Points to a null-terminated string that specifies the section
  274. //                   containing the entry.
  275. //     lpszEntry   - Points to a null-terminated string that contains the entry whose
  276. //                   value is to be retrieved.
  277. //     pBytes      - Address of a UINT to receive the size of 'ppData'.
  278. //     ppData      - Address of a LPBYTE data member to receive the value. It is the
  279. //     caller's responsibility to free the memory allocated for 'ppData'.
  280. // Example:
  281. //     An example of this would be:
  282. // <code>
  283. // void CXTDockWindow::LoadBarSize(CString strSection)
  284. // {
  285. //     XT_MANAGE_STATE;  // Switch to toolkit resources/module state
  286. //
  287. //     // restore the previous bar style.
  288. //     if (::IsWindow(m_hWnd))
  289. //     {
  290. //         UINT nSize = 0;
  291. //         LPBYTE pbtData = 0;
  292. //         CString string;
  293. //         string.LoadString(XT_IDS_REG_BARPOS);
  294. //
  295. //         CXTRegistryManager regManager;
  296. //         if (regManager.GetProfileBinary(strSection,
  297. //             string, &pbtData, &nSize))
  298. //         {
  299. //             XT_BARPLACEMENT* pBP =
  300. //                 reinterpret_cast<XT_BARPLACEMENT*>(pbtData);
  301. //
  302. //             SetBarPlacement(pBP);
  303. //             delete [] pbtData;
  304. //         }
  305. //     }
  306. // }</code>
  307. // Returns:
  308. //     Nonzero if successful, otherwise returns zero.
  309. //-----------------------------------------------------------------------
  310. BOOL GetProfileBinary(LPCTSTR lpszSection, LPCTSTR lpszEntry, BYTE** ppData, UINT* pBytes);
  311. //-----------------------------------------------------------------------
  312. // Summary:
  313. //     Call this member function to retrieve the string associated with
  314. //     an entry within the specified section in the application's registry
  315. //     or .INI file. The return value is the string from the application's
  316. //     .INI file or 'lpszDefault' if the string cannot be found. The maximum
  317. //     string length supported by the framework is _MAX_PATH. If 'lpszDefault'
  318. //     is NULL, the return value is an empty string.
  319. // Parameters:
  320. //     lpszSection - Points to a null-terminated string that specifies the section
  321. //                   containing the entry.
  322. //     lpszEntry   - Points to a null-terminated string that contains the entry whose
  323. //                   value is to be retrieved.
  324. //     lpszDefault - Points to the default string value for the given entry if the
  325. //                   entry cannot be found in the initialization file.
  326. // Returns:
  327. //     The string associated with an entry within the specified section in the
  328. //     application's registry or .INI file. The return value is the string from the
  329. //     application's .INI file or 'lpszDefault' if the string cannot be found.
  330. //-----------------------------------------------------------------------
  331. CString GetProfileString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault);
  332. //-----------------------------------------------------------------------
  333. // Summary:
  334. //     Call this member function to retrieve the value of a CPoint from
  335. //     an entry within a specified section of the application's registry or
  336. //     .INI file. Retrieves the CPoint value that follows the specified entry
  337. //     if the function is successful.
  338. // Parameters:
  339. //     lpszSection - Points to a null-terminated string that specifies the section
  340. //                   containing the entry.
  341. //     lpszEntry   - Points to a null-terminated string that contains the entry whose
  342. //                   value is to be retrieved.
  343. //     ptResult    - Points to the variable to be filled from the registry.
  344. // Returns:
  345. //     TRUE if the function succeeds, otherwise returns FALSE.
  346. //-----------------------------------------------------------------------
  347. BOOL GetProfilePoint(LPCTSTR lpszSection, LPCTSTR lpszEntry, CPoint* ptResult);
  348. //-----------------------------------------------------------------------
  349. // Summary:
  350. //     Call this member function to retrieve the value of a CRect from
  351. //     an entry within a specified section of the application's registry or
  352. //     .INI file. Retrieves the CRect value that follows the specified entry
  353. //     if the function is successful.
  354. // Parameters:
  355. //     lpszSection - Points to a null-terminated string that specifies the section
  356. //                   containing the entry.
  357. //     lpszEntry   - Points to a null-terminated string that contains the entry whose
  358. //                   value is to be retrieved.
  359. //     rcResult    - Points to the variable to be filled from the registry.
  360. // Returns:
  361. //     TRUE if the function succeeds, otherwise returns FALSE.
  362. //-----------------------------------------------------------------------
  363. BOOL GetProfileRect(LPCTSTR lpszSection, LPCTSTR lpszEntry, CRect* rcResult);
  364. //-----------------------------------------------------------------------
  365. // Summary:
  366. //     Call this member function to retrieve the value of a CSize from
  367. //     an entry within a specified section of the application's registry or
  368. //     .INI file. Retrieves the CSize value that follows the specified entry
  369. //     if the function is successful.
  370. // Parameters:
  371. //     lpszSection - Points to a null-terminated string that specifies the section
  372. //                   containing the entry.
  373. //     lpszEntry   - Points to a null-terminated string that contains the entry whose
  374. //                   value is to be retrieved.
  375. //     rcResult    - Points to the variable to be filled from the registry.
  376. // Returns:
  377. //     TRUE if the function succeeds, otherwise returns FALSE.
  378. //-----------------------------------------------------------------------
  379. BOOL GetProfileSize(LPCTSTR lpszSection, LPCTSTR lpszEntry, CSize* rcResult);
  380. //-----------------------------------------------------------------------
  381. // Summary:
  382. //     Call this member function to retrieve the value of a double from
  383. //     an entry within a specified section of the application's registry or
  384. //     .INI file. Retrieves the value that follows the specified entry if the
  385. //     function is successful.
  386. // Parameters:
  387. //     lpszSection - Points to a null-terminated string that specifies the section
  388. //                   containing the entry.
  389. //     lpszEntry   - Points to a null-terminated string that contains the entry whose
  390. //                   value is to be retrieved.
  391. //     rcResult    - Points to the variable to be filled from the registry.
  392. // Returns:
  393. //     TRUE if the function succeeds, otherwise returns FALSE.
  394. //-----------------------------------------------------------------------
  395. BOOL GetProfileDouble(LPCTSTR lpszSection, LPCTSTR lpszEntry, double* rcResult);
  396. //-----------------------------------------------------------------------
  397. // Summary:
  398. //     Call this member function to retrieve the value of a DWORD from
  399. //     an entry within a specified section of the application's registry or
  400. //     .INI file. Retrieves the value that follows the specified entry if the
  401. //     function is successful.
  402. // Parameters:
  403. //     lpszSection - Points to a null-terminated string that specifies the section
  404. //                   containing the entry.
  405. //     lpszEntry   - Points to a null-terminated string that contains the entry whose
  406. //                   value is to be retrieved.
  407. //     rcResult    - Points to the variable to be filled from the registry.
  408. //
  409. //          Note that because COLORREF is a typedef for a DWORD, GetProfileColor calls
  410. //          this function.
  411. // Returns:
  412. //     TRUE if the function succeeds, otherwise returns FALSE.
  413. //-----------------------------------------------------------------------
  414. BOOL GetProfileDword(LPCTSTR lpszSection, LPCTSTR lpszEntry, DWORD* rcResult);
  415. //-----------------------------------------------------------------------
  416. // Summary:
  417. //     Call this member function to retrieve the value of a COLORREF from
  418. //     an entry within a specified section of the application's registry or
  419. //     .INI file. Retrieves the value that follows the specified entry if the
  420. //     function is successful.
  421. // Parameters:
  422. //     lpszSection - Points to a null-terminated string that specifies the section
  423. //                   containing the entry.
  424. //     lpszEntry   - Points to a null-terminated string that contains the entry whose
  425. //                   value is to be retrieved.
  426. //     rcResult    - Points to the variable to be filled from the registry.
  427. //
  428. //          Note that because COLORREF is a typedef for a DWORD, this function only
  429. //          calls GetProfileDword.
  430. // Returns:
  431. //     TRUE if the function succeeds, otherwise returns FALSE.
  432. //-----------------------------------------------------------------------
  433. BOOL GetProfileColor(LPCTSTR lpszSection, LPCTSTR lpszEntry, COLORREF* rcResult);
  434. // -----------------------------------------------------------------------------
  435. // Summary:
  436. //     Call this function to fill a CMap (CString to DWORD) with the
  437. //     names and value types under a specific registry section.
  438. // Parameters:
  439. //     lpszSection -  Points to a null-terminated string that specifies the
  440. //                    section containing the entry.
  441. //     mapItems -     A reference to a CMap, which will contain the items in the
  442. //                    registry under this section. Can be NULL. Does not include
  443. //                    subsection names.
  444. //     arrayNames -   A reference to a CStringArray which, if not NULL, will
  445. //                    contain an array of names in the order they were read from
  446. //                    the registry.
  447. // Remarks:
  448. //     The function also takes a pointer to a CStringArray because CMap
  449. //     is a sorted container; therefore, it is not possible to get the
  450. //     items in the order they appeared from it.
  451. //
  452. //     Pass NULL for the CStringArray* if you don't want to use it, and
  453. //     NULL into the CMap if you only require a list of the item names.
  454. //
  455. //     The DWORD values returned are as follows:
  456. //
  457. //     * <b>REG_BINARY</b> Binary data in any form.
  458. //     * <b>REG_DWORD</b> A 32-bit number.
  459. //     * <b>REG_DWORD_LITTLE_ENDIAN</b> A 32-bit number in
  460. //           little-endian format. This is equivalent to REG_DWORD. In
  461. //           little-endian format, a multi-byte value is stored in memory from
  462. //           the lowest byte (the "little end") to the highest byte. For
  463. //           example, the value 0x12345678 is stored as (0x78 0x56 0x34 0x12)
  464. //           in little-endian format. Windows NT/Windows 2000, Windows 95, and
  465. //           Windows 98 are designed to run on little-endian computer
  466. //           architectures. A user may connect to computers that have
  467. //           big-endian architectures, such as some UNIX systems.
  468. //     * <b>REG_DWORD_BIG_ENDIAN</b> A 32-bit number in big-endian
  469. //           format. In big-endian format, a multi-byte value is stored in
  470. //           memory from the highest byte (the "big end") to the lowest byte.
  471. //           For example, the value 0x12345678 is stored as (0x12 0x34 0x56
  472. //           0x78) in big-endian format.
  473. //     * <b>REG_EXPAND_SZ</b> A null-terminated string that contains
  474. //           unexpanded references to environment variables (for example,
  475. //           "%PATH%"). It will be a Unicode or ANSI string depending on
  476. //           whether you use the Unicode or ANSI functions. To expand the
  477. //           environment variable references, use the ExpandEnvironmentStrings
  478. //           function.
  479. //     * <b>REG_LINK</b> A Unicode symbolic link. Used internally.
  480. //           Applications should not use this type.
  481. //     * <b>REG_MULTI_SZ</b> An array of null-terminated strings,
  482. //           terminated by two null characters.
  483. //     * <b>REG_NONE</b> No defined value type.
  484. //     * <b>REG_QWORD</b> A 64-bit number.
  485. //     * <b>REG_QWORD_LITTLE_ENDIAN</b> A 64-bit number in
  486. //           little-endian format. This is equivalent to REG_QWORD.
  487. //     * <b>REG_RESOURCE_LIST</b> A device-driver resource list.
  488. //     * <b>REG_SZ</b> A null-terminated string. It will be a Unicode
  489. //           or ANSI string, depending on whether or not you use the Unicode
  490. //           or ANSI functions.
  491. // Returns:
  492. //     Zero if the section is empty; otherwise it returns the number of
  493. //     values present.
  494. // -----------------------------------------------------------------------------
  495. int EnumValues(LPCTSTR lpszSection, CMap<CString, LPCTSTR, DWORD, DWORD&>*  mapItems, CStringArray* arrayNames);
  496. //-----------------------------------------------------------------------
  497. // Summary:
  498. //     Call this function to fill a CStringArray with the names of keys below
  499. //     the key specified. The return value indicates the number of keys found
  500. //     by the function, which can be used to check if any were found.
  501. //     CStringArray::GetSize will give the same result if needed, assuming
  502. //     the array is zeroed when it goes in. The function does not zero it,
  503. //     leaving the possibility of getting a list of subkeys of more than one
  504. //     key for whatever reason.
  505. // Parameters:
  506. //     lpszSection - Points to a null-terminated string that specifies the section
  507. //                   containing the entry.
  508. //     arrayKeys   - A reference to a CStringArray, which will contain the keys in the
  509. //                   registry under the above key.
  510. //-----------------------------------------------------------------------
  511. int EnumKeys(LPCTSTR lpszSection, CStringArray & arrayKeys);
  512. //-----------------------------------------------------------------------
  513. // Summary:
  514. //     Call this function to delete a registry key and all of its contents.
  515. // Parameters:
  516. //     lpszSection - Points to a null-terminated string that specifies the section
  517. //                   containing the entry.
  518. //     lpszKey     - Points to a null-terminated string that specifies the subkey to delete.
  519. // Returns:
  520. //     true if successful, otherwise returns false.
  521. //-----------------------------------------------------------------------
  522. bool DeleteKey(LPCTSTR lpszSection, LPCTSTR lpszKey);
  523. //-----------------------------------------------------------------------
  524. // Summary:
  525. //     Call this function to delete a registry value.
  526. // Parameters:
  527. //     lpszSection - Points to a null-terminated string that specifies the section
  528. //                   containing the entry.
  529. //     lpszKey     - Points to a null-terminated string that specifies the value to delete.
  530. // Returns:
  531. //     true if successful, otherwise returns false.
  532. //-----------------------------------------------------------------------
  533. bool DeleteValue(LPCTSTR lpszSection, LPCTSTR lpszKey);
  534. //-----------------------------------------------------------------------
  535. // Summary:
  536. //     Call this member function to retrieve that last error (if any) that
  537. //     was returned by Windows when accessing the system registry.
  538. // Returns:
  539. //     If the last operation was successful the return value is ERROR_SUCCESS,
  540. //     otherwise a nonzero error code is returned as defined in Winerror.h. You
  541. //     can call GetErrorMessage() to get a generic description of the error.
  542. //-----------------------------------------------------------------------
  543. LONG GetErrorCode() const;
  544. //-----------------------------------------------------------------------
  545. // Summary:
  546. //    Call this member function to retrieve the description text for the
  547. //    last error (if any) that occurred while accessing the system registry.
  548. // Returns:
  549. //    Returns a CString object that contains the error message that describes
  550. //    the last error that occurred while accessing the system registry.
  551. //-----------------------------------------------------------------------
  552. CString GetErrorMessage() const;
  553. protected:
  554. //-----------------------------------------------------------------------
  555. // Summary:
  556. //     Called to get a handle to the CWinApp's registry key.
  557. // Parameters:
  558. //     samDesired - An access mask that specifies the desired access rights to the key
  559. // Returns:
  560. //     An HKEY handle to the applications registry key.
  561. //-----------------------------------------------------------------------
  562. virtual HKEY GetAppRegistryKey(REGSAM samDesired = KEY_WRITE | KEY_READ);
  563. //-----------------------------------------------------------------------
  564. // Summary:
  565. //     Called to get a handle to the specified section from the applications registry key.
  566. // Parameters:
  567. //     lpszSection - Section to get the key for.
  568. //     samDesired  - An access mask that specifies the desired access rights to the key
  569. // Returns:
  570. //     An HKEY handle to the specified section from the applications registry key.
  571. //-----------------------------------------------------------------------
  572. virtual HKEY GetSectionKey(LPCTSTR lpszSection, REGSAM samDesired = KEY_WRITE | KEY_READ);
  573. private:
  574. BOOL GetProfileInfo();
  575. LONG RecurseDeleteKey(HKEY hKey, LPCTSTR lpszKey);
  576. LONG m_lResult;
  577. };
  578. //////////////////////////////////////////////////////////////////////
  579. AFX_INLINE void CXTRegistryManager::SetINIFileName(LPCTSTR strINIFileName) {
  580. m_strINIFileName = strINIFileName;
  581. }
  582. AFX_INLINE CString& CXTRegistryManager::GetINIFileName() {
  583. return m_strINIFileName;
  584. }
  585. AFX_INLINE LONG CXTRegistryManager::GetErrorCode() const {
  586. return m_lResult;
  587. }
  588. #endif // __XTREGISTRYMANAGER_H__