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

对话框与窗口

开发平台:

Visual C++

  1. // XTPTopLevelWndMsgNotifier.h: interface for the CXTPTopLevelWndMsgNotifier class.
  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(_XTP_TOP_LEVEL_WND_MSG_NOTIFIER_H__)
  22. #define _XTP_TOP_LEVEL_WND_MSG_NOTIFIER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CXTPTopLevelWndMsgNotifier window
  29. //===========================================================================
  30. // Summary:
  31. //     Define name for XTP_WM_TIME_ZONE_CHANGED windows message.
  32. //===========================================================================
  33. static LPCTSTR XTP_WM_TIME_ZONE_CHANGED_MSG = _T("XTP_WM_TimeZoneChanged");
  34. //===========================================================================
  35. // Summary:
  36. //     Define windows message which send by CXTPTopLevelWndMsgNotifier when
  37. //     current timezone is changed.
  38. //===========================================================================
  39. const UINT XTP_WM_TIME_ZONE_CHANGED = RegisterWindowMessage(XTP_WM_TIME_ZONE_CHANGED_MSG);
  40. //{{AFX_CODEJOCK_PRIVATE
  41. class CXTPTopLevelWndMsgNotifier;
  42. //}}AFX_CODEJOCK_PRIVATE
  43. //-----------------------------------------------------------------------
  44. // Summary:
  45. //      This global function is used to get library static common top-level
  46. //      window object to catch windows messages, which system sends to
  47. //      top-level windows (like WM_TIMECHANGE, WM_SYSCOLORCHANGE).
  48. // Remarks:
  49. //      Using CXTPTopLevelWndMsgNotifier you can advise your non-top-level
  50. //      (child) windows to receive these messages.
  51. // Returns:
  52. //      A pointer to CXTPTopLevelWndMsgNotifier object.
  53. //-----------------------------------------------------------------------
  54. CXTPTopLevelWndMsgNotifier* XTPGetTopLevelWndMsgNotifier();
  55. //===========================================================================
  56. // Summary:
  57. //      This class is used to catch windows messages, which system sends to
  58. //      top-level windows and to send them to subscribers windows.
  59. //      The following messages are supported:
  60. //          <b>WM_TIMECHANGE</b>
  61. //          <b>WM_SYSCOLORCHANGE</b>
  62. // See Also:
  63. //      WM_TIMECHANGE, WM_SYSCOLORCHANGE.
  64. //===========================================================================
  65. class _XTP_EXT_CLASS CXTPTopLevelWndMsgNotifier : public CWnd
  66. {
  67. public:
  68. //-----------------------------------------------------------------------
  69. // Summary:
  70. //     Default object constructor.
  71. //-----------------------------------------------------------------------
  72. CXTPTopLevelWndMsgNotifier();
  73. //-----------------------------------------------------------------------
  74. // Summary:
  75. //     Default object destructor.
  76. //-----------------------------------------------------------------------
  77. virtual ~CXTPTopLevelWndMsgNotifier();
  78. //-----------------------------------------------------------------------
  79. // Summary:
  80. //     This enum contains additional parameter value(s).
  81. //-----------------------------------------------------------------------
  82. enum EnumParams
  83. {
  84. msgAll = 0      // This value means all messages or any message.
  85. };
  86. //-----------------------------------------------------------------------
  87. // Summary:
  88. //     Advice CWnd object to receive specified top-level windows message(s).
  89. // Parameters:
  90. //      pWnd    - [in] A pointer to client window.
  91. //      uWndMsg - [in] Windows message ID.
  92. // Remarks:
  93. //      If <b>uWndMsg</b> is <b>msgAll</b> than all supported messages
  94. //      will be sent to client window.
  95. // Se Also:
  96. //      Unadvise.
  97. //-----------------------------------------------------------------------
  98. void Advise(CWnd* pWnd, UINT uWndMsg = msgAll);
  99. //-----------------------------------------------------------------------
  100. // Summary:
  101. //     Unadvise CWnd object from receive specified top-level windows message(s).
  102. // Parameters:
  103. //      pWnd    - [in] A pointer to client window.
  104. //      uWndMsg - [in] Windows message ID.
  105. // Remarks:
  106. //      If <b>uWndMsg</b> is <b>msgAll</b> unadvised from all supported
  107. //      messages.
  108. // Se Also:
  109. //      Advise.
  110. //-----------------------------------------------------------------------
  111. void Unadvise(CWnd* pWnd, UINT uWndMsg = msgAll);
  112. protected:
  113. //{{AFX_CODEJOCK_PRIVATE
  114. friend CXTPTopLevelWndMsgNotifier* XTPGetTopLevelWndMsgNotifier();
  115. //}}AFX_CODEJOCK_PRIVATE
  116. //-----------------------------------------------------------------------
  117. // Summary:
  118. //     This method is used to Create a CWnd object.
  119. // Remarks:
  120. //      A simple top-level window will be created.
  121. // Returns:
  122. //      TRUE is successful< FALSE otherwise.
  123. //-----------------------------------------------------------------------
  124. BOOL CreateWnd();
  125. //{{AFX_CODEJOCK_PRIVATE
  126. DECLARE_MESSAGE_MAP()
  127. afx_msg void OnTimeChange();
  128. afx_msg void OnSysColorChange();
  129. afx_msg void OnTimer(UINT_PTR uTimerID);
  130. //}}AFX_CODEJOCK_PRIVATE
  131. private:
  132. struct CLIENT_INFO {
  133. CWnd* m_pWnd;
  134. UINT m_uWndMsg;
  135. };
  136. class CClientsArray : public CArray<CLIENT_INFO, CLIENT_INFO&>
  137. {
  138. public:
  139. CClientsArray();
  140. virtual ~CClientsArray();
  141. int FindExact(CWnd* pWnd, UINT uWndMsg = CXTPTopLevelWndMsgNotifier::msgAll);
  142. int FindClient(CWnd* pWnd, UINT uWndMsg = CXTPTopLevelWndMsgNotifier::msgAll);
  143. void Remove(CWnd* pWnd, UINT uWndMsg = CXTPTopLevelWndMsgNotifier::msgAll);
  144. };
  145. CClientsArray   m_arClients;
  146. SYSTEMTIME      m_timeLastDate;
  147. TIME_ZONE_INFORMATION   m_tziLast;
  148. void SendToClients(UINT uWndMsg, WPARAM wParam, LPARAM lParam);
  149. void _ProcessTimeZone();
  150. BOOL IsTimeZoneEqual(const TIME_ZONE_INFORMATION& rTzi1, const TIME_ZONE_INFORMATION& rTzi2) const;
  151. };
  152. /////////////////////////////////////////////////////////////////////////////
  153. #endif // !defined(_XTP_TOP_LEVEL_WND_MSG_NOTIFIER_H__)