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

对话框与窗口

开发平台:

Visual C++

  1. // XTPHookManager.h : interface for the CXTPHookManager class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO 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(__XTPHOOKMANAGER_H__)
  22. #define __XTPHOOKMANAGER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. //===========================================================================
  28. // Summary:
  29. //     HookAble interface.
  30. // See Also: CXTPHookManager, CXTPHookManager::SetHook
  31. //===========================================================================
  32. class _XTP_EXT_CLASS CXTPHookManagerHookAble
  33. {
  34. public:
  35. //-------------------------------------------------------------------------
  36. // Summary:
  37. //     Constructs a CXTPHookManagerHookAble object
  38. //-------------------------------------------------------------------------
  39. CXTPHookManagerHookAble();
  40. //-------------------------------------------------------------------------
  41. // Summary:
  42. //     Destroys a CXTPHookManagerHookAble object, handles clean up and deallocation
  43. //-------------------------------------------------------------------------
  44. virtual ~CXTPHookManagerHookAble();
  45. public:
  46. //-----------------------------------------------------------------------
  47. // Summary:
  48. //     This member function is called by WindowProc, or is called during message reflection.
  49. // Parameters:
  50. //     hWnd - Window handle that the message belongs to.
  51. //     nMessage - Specifies the message to be sent.
  52. //     wParam - Specifies additional message-dependent information.
  53. //     lParam - Specifies additional message-dependent information.
  54. //     lResult - The return value of WindowProc. Depends on the message; may be NULL.
  55. // Returns:
  56. //     TRUE if message was processed.
  57. //-----------------------------------------------------------------------
  58. virtual int OnHookMessage(HWND hWnd, UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult) = 0;
  59. public:
  60. BOOL m_bAutoDestroy;            // TRUE to automatically delete hook
  61. };
  62. //===========================================================================
  63. // Summary:
  64. //     CXTPHookManager is standalone class. It is used to hook a CWnd object
  65. //     in order to intercept and act upon window messages that are received.
  66. // Remarks:
  67. //     To access CXTPHookManager methods use XTPHookManager function
  68. // See Also:
  69. //     XTPHookManager, CXTPHookManagerHookAble
  70. //===========================================================================
  71. class _XTP_EXT_CLASS CXTPHookManager
  72. {
  73. private:
  74. class CHookSink;
  75. protected:
  76. //-----------------------------------------------------------------------
  77. // Summary:
  78. //     Constructs a CXTPHookManager object.
  79. //-----------------------------------------------------------------------
  80. CXTPHookManager();
  81. public:
  82. //-----------------------------------------------------------------------
  83. // Summary:
  84. //     Destroys a CXTPHookManager object, handles cleanup and de-
  85. //     allocation.
  86. //-----------------------------------------------------------------------
  87. ~CXTPHookManager();
  88. public:
  89. //-----------------------------------------------------------------------
  90. // Summary:
  91. //     This member function will hook a window so that its messages are
  92. //     intercepted before they are passed on to the specified window.
  93. // Parameters:
  94. //     hWnd  - A handle to a window that represents that represents the window to hook.
  95. //     pHook - Hookable class that will receive messages
  96. //-----------------------------------------------------------------------
  97. void SetHook(HWND hWnd, CXTPHookManagerHookAble* pHook);
  98. //-----------------------------------------------------------------------
  99. // Summary:
  100. //     Removes a hook associated with a window.
  101. // Parameters:
  102. //     hWnd  - A handle to a window that hooks need to remove
  103. //     pHook - Hookable class that hooks need to remove
  104. //-----------------------------------------------------------------------
  105. void RemoveHook(HWND hWnd, CXTPHookManagerHookAble* pHook);
  106. //-----------------------------------------------------------------------
  107. // Summary:
  108. //     Removes all hooks associated with a window.
  109. // Parameters:
  110. //     hWnd  - A handle to a window that hooks need to remove
  111. //     pHook - Hookable class that hooks need to remove
  112. //-----------------------------------------------------------------------
  113. void RemoveAll(HWND hWnd);
  114. void RemoveAll(CXTPHookManagerHookAble* pHook); //<combine CXTPHookManager::RemoveAll@HWND>
  115. //-----------------------------------------------------------------------
  116. // Summary:
  117. //     Searches collection of Hookable interfaces that receive hooks of specified window.
  118. // Parameters:
  119. //     hWnd  - A handle to a window need to test
  120. // Returns:
  121. //     CHookSink pointer if found; otherwise returns NULL;
  122. //-----------------------------------------------------------------------
  123. CHookSink* Lookup(HWND hWnd);
  124. public:
  125. //-----------------------------------------------------------------------
  126. // Summary:
  127. //      Calls the default window procedure.
  128. // Parameters:
  129. //      wParam - [in] Specifies additional message information. The content of this parameter depends on the value of the Msg parameter.
  130. //      lParam - [in] Specifies additional message information. The content of this parameter depends on the value of the Msg parameter.
  131. //-----------------------------------------------------------------------
  132. LRESULT Default();
  133. LRESULT Default(WPARAM wParam, LPARAM lParam); // combine CXTPHookManager::Default>
  134. private:
  135. static LRESULT CALLBACK HookWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
  136. private:
  137. void RemoveAll();
  138. CMap<HWND, HWND, LPVOID, LPVOID> m_mapHooks;
  139. friend _XTP_EXT_CLASS CXTPHookManager* AFX_CDECL XTPHookManager();
  140. friend class CHookSink;
  141. };
  142. //---------------------------------------------------------------------------
  143. // Summary:
  144. //     Call this function to access CXTPHookManager members.
  145. //     Since this class is designed as a single instance object you can
  146. //     only access version info through this method. You <b>cannot</b>
  147. //     directly instantiate an object of type CXTPHookManager.
  148. // Example:
  149. //     <code>XTPHookManager()->SetHook(hWnd, this);</code>
  150. //---------------------------------------------------------------------------
  151. _XTP_EXT_CLASS CXTPHookManager* AFX_CDECL XTPHookManager();
  152. //-------------------------------------------------------------------------
  153. // Summary:
  154. //     Shadow options of selected paint manager
  155. // See Also: CXTPPaintManager::GetShadowOptions()
  156. //-------------------------------------------------------------------------
  157. enum XTPShadowOptions
  158. {
  159. xtpShadowOfficeAlpha = 1,           // Office alpha shadow
  160. xtpShadowShowPopupControl = 2       // Draw shadow for popup controls
  161. };
  162. //===========================================================================
  163. // Summary:
  164. //     CXTPShadowManager is standalone class used to manage CommandBars' shadows.
  165. //===========================================================================
  166. class _XTP_EXT_CLASS CXTPShadowManager : public CXTPCmdTarget
  167. {
  168. private:
  169. typedef BOOL(WINAPI* LPFNUPDATELAYEREDWINDOW) (HWND hwnd, HDC hdcDst, POINT *pptDst, SIZE *psize, HDC hdcSrc, POINT *pptSrc, COLORREF crKey, BLENDFUNCTION *pblend, DWORD dwFlags);
  170. private:
  171. class CShadowWnd;
  172. class CShadowList;
  173. public:
  174. //===========================================================================
  175. // Summary:
  176. //     Constructs a CXTPShadowManager object.
  177. //===========================================================================
  178. CXTPShadowManager();
  179. public:
  180. //-----------------------------------------------------------------------
  181. // Summary:
  182. //     Destroys a CXTPShadowManager object, handles cleanup and deallocation.
  183. //-----------------------------------------------------------------------
  184. ~CXTPShadowManager();
  185. public:
  186. //-----------------------------------------------------------------------
  187. // Summary:
  188. //     Check the system alpha shadow ability.
  189. // Returns:
  190. //     TRUE if alpha shadow available; otherwise returns FALSE
  191. //-----------------------------------------------------------------------
  192. BOOL IsAlphaShadow();
  193. //-----------------------------------------------------------------------
  194. // Summary:
  195. //     Sets the command bar  shadow.
  196. // Parameters:
  197. //     pShadowOwner - Points to a CWnd object
  198. //     rcExclude - Excluded rectangle.
  199. //     pControl - Points to a CXTPControlPopup object
  200. //-----------------------------------------------------------------------
  201. void SetShadow(CRect rcWindow, CWnd* pShadowOwner);
  202. void SetShadow(CWnd* pShadowOwner, const CRect& rcExclude = CRect(0, 0, 0, 0)); // <combine CXTPShadowManager::SetShadow@CXTPControlPopup*>
  203. //-----------------------------------------------------------------------
  204. // Summary:
  205. //     Removes shadows for the command bar.
  206. // Parameters:
  207. //     pShadowOwner - Points to a CXTPCommandBar object
  208. //-----------------------------------------------------------------------
  209. void RemoveShadow(CWnd* pShadowOwner);
  210. void OffsetShadow(CWnd* pShadowOwner, CSize szOffset);
  211. POSITION GetHeadPosition(CWnd* pShadowOwner) const;
  212. CWnd* GetNext(POSITION& pos) const;
  213. public:
  214. int GetShadowOptions() const;
  215. void SetShadowOptions(int nOptions);
  216. void SetShadowColor(COLORREF clrShadow);
  217. private:
  218. void DestroyShadow(CShadowWnd*);
  219. CShadowWnd* CreateShadow(BOOL bHoriz, CRect rc, CRect rcExclude, CWnd* pShadowOwner, BOOL bControlPopup);
  220. public:
  221. BOOL m_bUseSystemSaveBitsStyle;
  222. private:
  223. LPFNUPDATELAYEREDWINDOW m_pfnUpdateLayeredWindow;
  224. CShadowList* m_pShadows;
  225. BOOL m_bAlphaShadow;
  226. int m_nShadowOptions;
  227. COLORREF m_clrShadowFactor;
  228. friend class CShadowWnd;
  229. };
  230. AFX_INLINE int CXTPShadowManager::GetShadowOptions() const {
  231. return m_nShadowOptions;
  232. }
  233. AFX_INLINE void CXTPShadowManager::SetShadowOptions(int nOptions) {
  234. m_nShadowOptions = nOptions;
  235. }
  236. AFX_INLINE void CXTPShadowManager::SetShadowColor(COLORREF clrShadow) {
  237. m_clrShadowFactor = clrShadow;
  238. }
  239. #endif //#if !defined(__XTPHOOKMANAGER_H__)