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

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarTimeZoneHelper.h: interfaces for Time Zone Helper classes.
  2. //
  3. // This file is a part of the XTREME CALENDAR 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. #if !defined(_XTPCALENDARTIMEZONEHELPER_H__)
  22. #define _XTPCALENDARTIMEZONEHELPER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "XTPCalendarPtrCollectionT.h"
  28. #include "XTPCalendarPtrs.h"
  29. //===========================================================================
  30. // Summary:
  31. //      This class extend TIME_ZONE_INFORMATION structure.
  32. // Remarks:
  33. //      It has additional data members to represent full information about
  34. //      time zone.
  35. //      Also it implements some helper functions and OLE interface methods.
  36. // See Also:
  37. //      TIME_ZONE_INFORMATION, CXTPCalendarTimeZones.
  38. //       MSDN Articles:
  39. //          INFO: Retrieving Time-Zone Information
  40. //          KB115231, Q115231
  41. //
  42. //          HOWTO: Change Time Zone Information Using Visual Basic
  43. //          KB221542, Q221542
  44. //===========================================================================
  45. class _XTP_EXT_CLASS CXTPCalendarTimeZone : public CXTPCmdTarget,
  46. public TIME_ZONE_INFORMATION
  47. {
  48. //{{AFX_CODEJOCK_PRIVATE
  49. friend class CXTPCalendarTimeZones;
  50. DECLARE_DYNAMIC(CXTPCalendarTimeZone)
  51. //}}AFX_CODEJOCK_PRIVATE
  52. public:
  53. //-----------------------------------------------------------------------
  54. // Summary:
  55. //      Default object constructor.
  56. // Parameters:
  57. //      pTZInfo - Pointer to a TIME_ZONE_INFORMATION data to initialize
  58. //                created object data.
  59. //      pTZInfoEx - Pointer to a source data object.
  60. // See Also: ~CXTPCalendarTimeZone(), TIME_ZONE_INFORMATION
  61. //-----------------------------------------------------------------------
  62. CXTPCalendarTimeZone(const TIME_ZONE_INFORMATION* pTZInfo = NULL);
  63. CXTPCalendarTimeZone(const CXTPCalendarTimeZone* pTZInfoEx); // <combine CXTPCalendarTimeZone::CXTPCalendarTimeZone@const TIME_ZONE_INFORMATION*>
  64. //-----------------------------------------------------------------------
  65. // Summary:
  66. //     Default object destructor.
  67. // See Also: CXTPCalendarTimeZone()
  68. //-----------------------------------------------------------------------
  69. virtual ~CXTPCalendarTimeZone();
  70. //-----------------------------------------------------------------------
  71. // Summary:
  72. //      Get a time zone display string value.
  73. // Returns:
  74. //      A string value like: "(GMT+02:00) Athens, Beirut, Istanbul, Minsk"
  75. //-----------------------------------------------------------------------
  76. CString GetDisplayString() const;
  77. //-----------------------------------------------------------------------
  78. // Summary:
  79. //      Get a time zone order index value.
  80. // Remarks:
  81. //      This index value is used to sort time zones in the right order.
  82. // Returns:
  83. //      A time zone order index value.
  84. //-----------------------------------------------------------------------
  85. DWORD   GetIndex() const;
  86. //-----------------------------------------------------------------------
  87. // Summary:
  88. //      Compare 2 time zones data.
  89. // Parameters:
  90. //      pTZI2 - Points to a TIME_ZONE_INFORMATION object.
  91. // Returns:
  92. //      TRUE - if time zones data related to the same time zone,
  93. //      otherwise - FALSE.
  94. //-----------------------------------------------------------------------
  95. BOOL IsEqual(const TIME_ZONE_INFORMATION* pTZI2) const;
  96. //-----------------------------------------------------------------------
  97. // Summary:
  98. //      Copy operator.
  99. // Parameters:
  100. //      rTZInfo - Pointer to a source data object.
  101. // Returns:
  102. //      A Constant reference to updated object
  103. // See Also:
  104. //      CXTPCalendarTimeZone()
  105. //-----------------------------------------------------------------------
  106. const CXTPCalendarTimeZone& operator=(const CXTPCalendarTimeZone& rTZInfo);
  107. //-----------------------------------------------------------------------
  108. // Summary:
  109. //      Get full information about the specified time zone.
  110. // Parameters:
  111. //      pTZIdata - Pointer to a time zone data object.
  112. // Remarks:
  113. //      Retrieve additional information from the registry.
  114. // Returns:
  115. //      A smart pointer to CXTPCalendarTimeZone object.
  116. // See Also:
  117. //      CXTPCalendarTimeZones
  118. //-----------------------------------------------------------------------
  119. static CXTPCalendarTimeZonePtr AFX_CDECL GetTimeZoneInfo(const TIME_ZONE_INFORMATION* pTZIdata);
  120. protected:
  121. CString m_strDisplayString; // A time zone display string stored value.
  122. DWORD   m_dwIndex;          // A time zone order index stored value.
  123. };
  124. //===========================================================================
  125. // Summary:
  126. //      This class represents a simple array collection of CXTPCalendarTimeZone
  127. //      objects.
  128. // Remarks:
  129. //      Array indexes always start at position 0.
  130. //      An InitFromRegistry() method is used to read all time zones from the
  131. //      registry and add them to the collection.
  132. //      Also it implements some helper functions and OLE interface methods.
  133. // See Also:
  134. //      TIME_ZONE_INFORMATION, CXTPCalendarTimeZone.
  135. //       MSDN Articles:
  136. //          INFO: Retrieving Time-Zone Information
  137. //          KB115231, Q115231
  138. //
  139. //          HOWTO: Change Time Zone Information Using Visual Basic
  140. //          KB221542, Q221542
  141. //===========================================================================
  142. class _XTP_EXT_CLASS CXTPCalendarTimeZones : public CXTPCmdTarget
  143. {
  144. //{{AFX_CODEJOCK_PRIVATE
  145. DECLARE_DYNAMIC(CXTPCalendarTimeZones)
  146. //}}AFX_CODEJOCK_PRIVATE
  147. public:
  148. //-----------------------------------------------------------------------
  149. // Summary:
  150. //      Default object constructor.
  151. // See Also: ~CXTPCalendarTimeZones()
  152. //-----------------------------------------------------------------------
  153. CXTPCalendarTimeZones();
  154. //-----------------------------------------------------------------------
  155. // Summary:
  156. //     Default object destructor.
  157. // See Also: CXTPCalendarTimeZones()
  158. //-----------------------------------------------------------------------
  159. virtual ~CXTPCalendarTimeZones();
  160. //-----------------------------------------------------------------------
  161. // Summary:
  162. //      Read all time zones from the registry and add them to the
  163. //      collection.
  164. // Returns:
  165. //      TRUE - if all time zones where successfully read,
  166. //      otherwise - FALSE.
  167. //-----------------------------------------------------------------------
  168. BOOL InitFromRegistry();
  169. //-----------------------------------------------------------------------
  170. // Summary:
  171. //      This member function is used to obtain the number of elements in
  172. //      this collection.
  173. // Returns:
  174. //     An int that contains the number of items in the collection.
  175. // See Also: GetAt()
  176. //-----------------------------------------------------------------------
  177. int GetCount() const;
  178. //-----------------------------------------------------------------------
  179. // Summary:
  180. //     Call this method to get an element at the specified numeric index.
  181. // Parameters:
  182. //     nIndex - An integer index that is greater than or equal to 0
  183. //              and less than the value returned by GetCount.
  184. // Returns:
  185. //     The pointer to the CXTPCalendarTimeZone element currently at this
  186. //     index.
  187. // See Also: GetCount()
  188. //-----------------------------------------------------------------------
  189. CXTPCalendarTimeZone* GetAt(long nIndex) const;
  190. //-----------------------------------------------------------------------
  191. // Summary:
  192. //      This method is used to find a time zone information using the
  193. //      specified time zone data.
  194. // Parameters:
  195. //      pTZI2 - Pointer to a time zone data object.
  196. // Returns:
  197. //     The pointer to the first object in the collection
  198. //     that matches the requested time zone.
  199. //     NULL if the such object is not found.
  200. //-----------------------------------------------------------------------
  201. CXTPCalendarTimeZone* Find(const TIME_ZONE_INFORMATION* pTZI2) const;
  202. public:
  203. //-----------------------------------------------------------------------
  204. // Summary:
  205. //      This structure represents format of binary data stored in the
  206. //      "TZI" registry key.
  207. // See also:
  208. //      Microsoft KB115231, TIME_ZONE_INFORMATION,
  209. //      XTP_CALENDAR_TZIRegValName_DATA,
  210. //      XTP_CALENDAR_TIMEZONESKEY_NT, XTP_CALENDAR_TIMEZONESKEY_9X
  211. //-----------------------------------------------------------------------
  212. struct REGISTRY_TIMEZONE_INFORMATION
  213. {
  214. LONG       Bias;         // Current bias for local time translation on this computer, in minutes.
  215. LONG       StandardBias; // Bias value to be used during local time translations that occur during standard time.
  216. LONG       DaylightBias; // Bias value to be used during local time translations that occur during daylight saving time.
  217. SYSTEMTIME StandardDate; // A SYSTEMTIME structure that contains a date and local time when the transition from daylight saving time to standard time occurs on this operating system.
  218. SYSTEMTIME DaylightDate; // A SYSTEMTIME structure that contains a date and local time when the transition from standard time to daylight saving time occurs on this operating system.
  219. };
  220. //-----------------------------------------------------------------------
  221. // Summary:
  222. //      This method is used to read a string value from the registry.
  223. // Parameters:
  224. //      hKey          - [in] Parent key handle.
  225. //      pcszValueName - [in] Value key name.
  226. //      rstrValue     - [out] CString object reference to store value.
  227. // Returns:
  228. //      TRUE - if successful, otherwise - FALSE.
  229. // See Also: GetRegBSTR()
  230. //-----------------------------------------------------------------------
  231. static BOOL GetRegStr(HKEY hKey, LPCTSTR pcszValueName, CString& rstrValue);
  232. //-----------------------------------------------------------------------
  233. // Summary:
  234. //      This method is used to read a UNICODE string value from the registry.
  235. // Parameters:
  236. //      hKey           - [in] Parent key handle.
  237. //      pcszValueNameW - [in] Value key name in the UNICODE format.
  238. //      rbstrValue     - [out] BSTR object reference to store value.
  239. // Remarks:
  240. //      It is used to get UNICODE strings without conversion to MBCS.
  241. //      If rbstrValue parameter is not NULL the SysFreeString()
  242. //      API function is called to erase value.
  243. // Returns:
  244. //      TRUE - if successful, otherwise - FALSE.
  245. // See Also: GetRegStr()
  246. //-----------------------------------------------------------------------
  247. static BOOL GetRegBSTR(HKEY hKey, LPCWSTR pcszValueNameW, BSTR& rbstrValue);
  248. //-----------------------------------------------------------------------
  249. // Summary:
  250. //      This method is used to read a DWORD value from the registry.
  251. // Parameters:
  252. //      hKey          - [in] Parent key handle.
  253. //      pcszValueName - [in] Value key name.
  254. //      rdwValue      - [out] DWORD variable reference to store value.
  255. // Returns:
  256. //      TRUE - if successful, otherwise - FALSE.
  257. //-----------------------------------------------------------------------
  258. static BOOL GetRegDWORD(HKEY hKey, LPCTSTR pcszValueName, DWORD& rdwValue);
  259. //-----------------------------------------------------------------------
  260. // Summary:
  261. //      This method is used to read a time zone information stored as
  262. //      binary value in the registry.
  263. // Parameters:
  264. //      hKey          - [in] Parent key handle.
  265. //      pcszValueName - [in] Value key name.
  266. //      rRegTZI       - [out] REGISTRY_TIMEZONE_INFORMATION object
  267. //                      reference to store value.
  268. // Returns:
  269. //      TRUE - if successful, otherwise - FALSE.
  270. //-----------------------------------------------------------------------
  271. static BOOL GetRegTZI(HKEY hKey, LPCTSTR pcszValueName, REGISTRY_TIMEZONE_INFORMATION& rRegTZI);
  272. protected:
  273. //--------------------------------------------------------------
  274. CXTPCalendarPtrCollectionT<CXTPCalendarTimeZone> m_arTZInfo; // Collection to store CXTPCalendarTimeZone object pointers;
  275. private:
  276. int CompareTZI(const CXTPCalendarTimeZone* pTZI1,
  277. const CXTPCalendarTimeZone* pTZI2,
  278. BOOL bUseIndex) const;
  279. void ParseDisplayStr(LPCTSTR str, int& rnBias, CString& rstrPlace) const;
  280. int GetDigit(TCHAR ch) const;
  281. protected:
  282. };
  283. ////////////////////////////////////////////////////////////////////////////
  284. #endif // !defined(_XTPCALENDARTIMEZONEHELPER_H__)