You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
355 lines
14 KiB
C++
355 lines
14 KiB
C++
// XTPHookManager.h : interface for the CXTPHookManager class.
|
|
//
|
|
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
|
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
#if !defined(__XTPHOOKMANAGER_H__)
|
|
#define __XTPHOOKMANAGER_H__
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// HookAble interface.
|
|
// See Also: CXTPHookManager, CXTPHookManager::SetHook
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPHookManagerHookAble
|
|
{
|
|
public:
|
|
//-------------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CXTPHookManagerHookAble object
|
|
//-------------------------------------------------------------------------
|
|
CXTPHookManagerHookAble();
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Summary:
|
|
// Destroys a CXTPHookManagerHookAble object, handles clean up and deallocation
|
|
//-------------------------------------------------------------------------
|
|
virtual ~CXTPHookManagerHookAble();
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called by WindowProc, or is called during message reflection.
|
|
// Parameters:
|
|
// hWnd - Window handle that the message belongs to.
|
|
// nMessage - Specifies the message to be sent.
|
|
// wParam - Specifies additional message-dependent information.
|
|
// lParam - Specifies additional message-dependent information.
|
|
// lResult - The return value of WindowProc. Depends on the message; may be NULL.
|
|
// Returns:
|
|
// TRUE if message was processed.
|
|
//-----------------------------------------------------------------------
|
|
virtual int OnHookMessage(HWND hWnd, UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult) = 0;
|
|
|
|
public:
|
|
BOOL m_bAutoDestroy; // TRUE to automatically delete hook
|
|
};
|
|
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// CXTPHookManager is standalone class. It is used to hook a CWnd object
|
|
// in order to intercept and act upon window messages that are received.
|
|
// Remarks:
|
|
// To access CXTPHookManager methods use XTPHookManager function
|
|
// See Also:
|
|
// XTPHookManager, CXTPHookManagerHookAble
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPHookManager
|
|
{
|
|
private:
|
|
class CHookSink;
|
|
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CXTPHookManager object.
|
|
//-----------------------------------------------------------------------
|
|
CXTPHookManager();
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Destroys a CXTPHookManager object, handles cleanup and de-
|
|
// allocation.
|
|
//-----------------------------------------------------------------------
|
|
~CXTPHookManager();
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function will hook a window so that its messages are
|
|
// intercepted before they are passed on to the specified window.
|
|
// Parameters:
|
|
// hWnd - A handle to a window that represents that represents the window to hook.
|
|
// pHook - Hookable class that will receive messages
|
|
//-----------------------------------------------------------------------
|
|
void SetHook(HWND hWnd, CXTPHookManagerHookAble* pHook);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Removes a hook associated with a window.
|
|
// Parameters:
|
|
// hWnd - A handle to a window that hooks need to remove
|
|
// pHook - Hookable class that hooks need to remove
|
|
//-----------------------------------------------------------------------
|
|
void RemoveHook(HWND hWnd, CXTPHookManagerHookAble* pHook);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Removes all hooks associated with a window.
|
|
// Parameters:
|
|
// hWnd - A handle to a window that hooks need to remove
|
|
//-----------------------------------------------------------------------
|
|
void RemoveAll(HWND hWnd);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Removes all hooks associated with a window.
|
|
// Parameters:
|
|
// pHook - Hookable class that hooks need to remove
|
|
//-----------------------------------------------------------------------
|
|
void RemoveAll(CXTPHookManagerHookAble* pHook);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Searches collection of Hookable interfaces that receive hooks of specified window.
|
|
// Parameters:
|
|
// hWnd - A handle to a window need to test
|
|
// Returns:
|
|
// CHookSink pointer if found; otherwise returns NULL;
|
|
//-----------------------------------------------------------------------
|
|
CHookSink* Lookup(HWND hWnd);
|
|
|
|
public:
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Calls the default window procedure.
|
|
//-----------------------------------------------------------------------
|
|
LRESULT Default();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Calls the default window procedure.
|
|
// Parameters:
|
|
// wParam - [in] Specifies additional message information. The content of this parameter depends on the value of the Msg parameter.
|
|
// lParam - [in] Specifies additional message information. The content of this parameter depends on the value of the Msg parameter.
|
|
//-----------------------------------------------------------------------
|
|
LRESULT Default(WPARAM wParam, LPARAM lParam);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Calls the default window procedure.
|
|
// Parameters:
|
|
// hWnd - [in] handle to HWND
|
|
// message - [in] message id
|
|
// wParam - [in] Specifies additional message information. The content of this parameter depends on the value of the Msg parameter.
|
|
// lParam - [in] Specifies additional message information. The content of this parameter depends on the value of the Msg parameter.
|
|
//-----------------------------------------------------------------------
|
|
LRESULT Default(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
|
|
|
private:
|
|
static LRESULT CALLBACK HookWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
|
|
|
public:
|
|
static UINT m_nMsgSinkRemoved;
|
|
|
|
private:
|
|
void RemoveAll();
|
|
void RemoveAll(HWND hWnd, BOOL bLastMessage);
|
|
CMap<HWND, HWND, LPVOID, LPVOID> m_mapHooks;
|
|
|
|
friend _XTP_EXT_CLASS CXTPHookManager* AFX_CDECL XTPHookManager();
|
|
friend class CHookSink;
|
|
};
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to access CXTPHookManager members.
|
|
// Since this class is designed as a single instance object you can
|
|
// only access version info through this method. You <b>cannot</b>
|
|
// directly instantiate an object of type CXTPHookManager.
|
|
// Example:
|
|
// <code>XTPHookManager()->SetHook(hWnd, this);</code>
|
|
//---------------------------------------------------------------------------
|
|
_XTP_EXT_CLASS CXTPHookManager* AFX_CDECL XTPHookManager();
|
|
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Summary:
|
|
// Shadow options of selected paint manager
|
|
// See Also: CXTPPaintManager::GetShadowOptions()
|
|
//-------------------------------------------------------------------------
|
|
enum XTPShadowOptions
|
|
{
|
|
xtpShadowOfficeAlpha = 1, // Office alpha shadow
|
|
xtpShadowShowPopupControl = 2 // Draw shadow for popup controls
|
|
};
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// CXTPShadowManager is standalone class used to manage CommandBars' shadows.
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPShadowManager : public CXTPCmdTarget
|
|
{
|
|
private:
|
|
typedef BOOL(WINAPI* LPFNUPDATELAYEREDWINDOW) (HWND hwnd, HDC hdcDst, POINT *pptDst, SIZE *psize, HDC hdcSrc, POINT *pptSrc, COLORREF crKey, BLENDFUNCTION *pblend, DWORD dwFlags);
|
|
|
|
private:
|
|
class CShadowWnd;
|
|
class CShadowList;
|
|
|
|
public:
|
|
//===========================================================================
|
|
// Summary:
|
|
// Constructs a CXTPShadowManager object.
|
|
//===========================================================================
|
|
CXTPShadowManager();
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Destroys a CXTPShadowManager object, handles cleanup and deallocation.
|
|
//-----------------------------------------------------------------------
|
|
~CXTPShadowManager();
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Check the system alpha shadow ability.
|
|
// Returns:
|
|
// TRUE if alpha shadow available; otherwise returns FALSE
|
|
//-----------------------------------------------------------------------
|
|
BOOL IsAlphaShadow();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Sets the command bar shadow.
|
|
// Parameters:
|
|
// rcWindow - Bounding rectangle of parent window
|
|
// pShadowOwner - Points to a parent windows
|
|
// rcExclude - Excluded rectangle.
|
|
// nLevel - Recursive level of the parent window
|
|
//-----------------------------------------------------------------------
|
|
void SetShadow(CRect rcWindow, CWnd* pShadowOwner);
|
|
void SetShadow(CWnd* pShadowOwner, const CRect& rcExclude = CRect(0, 0, 0, 0), int nLevel = 0); // <combine CXTPShadowManager::SetShadow@CRect@CWnd*>
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Removes shadows for the command bar.
|
|
// Parameters:
|
|
// pShadowOwner - Points to a CXTPCommandBar object
|
|
//-----------------------------------------------------------------------
|
|
void RemoveShadow(CWnd* pShadowOwner);
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to move shadow to specified offset
|
|
// Parameters:
|
|
// pShadowOwner - Shadow to move
|
|
// szOffset - Window move offset
|
|
//-----------------------------------------------------------------------
|
|
void OffsetShadow(CWnd* pShadowOwner, CSize szOffset);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This method used to enumerate all shadows of specific parent window
|
|
// Parameters:
|
|
// pShadowOwner - Point to parent owner of shadows
|
|
// Returns:
|
|
// Position to first element in list of shadows. Use GetNext method to retrieve it.
|
|
//-----------------------------------------------------------------------
|
|
POSITION GetHeadPosition(CWnd* pShadowOwner) const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This method used to enumerate all shadows of specific parent window. Call GetHeadPosition to get position of first shadow
|
|
// Parameters:
|
|
// pos - Current position of shadow in the list
|
|
// Returns:
|
|
// Pointer to Shadow corresponded to pos position.
|
|
//-----------------------------------------------------------------------
|
|
CWnd* GetNext(POSITION& pos) const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns combination of XTPShadowOptions flags for shadows
|
|
// Returns:
|
|
// Combination of XTPShadowOptions flags
|
|
//-----------------------------------------------------------------------
|
|
int GetShadowOptions() const;
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to set shadow options.
|
|
// Parameters:
|
|
// nOptions - Combination of XTPShadowOptions flags to set. It can be following values
|
|
// * <b>xtpShadowOfficeAlpha</b> - Office alpha shadow
|
|
// * <b>xtpShadowShowPopupControl</b> - Draw shadow for popup controls
|
|
//-----------------------------------------------------------------------
|
|
void SetShadowOptions(int nOptions);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to set specific color for shadows
|
|
// Parameters:
|
|
// clrShadow - New color to set
|
|
//-----------------------------------------------------------------------
|
|
void SetShadowColor(COLORREF clrShadow);
|
|
|
|
public:
|
|
BOOL m_bUseSystemSaveBitsStyle; // If this flag is set CS_SAVEBITS style will be used for shadow windows.
|
|
|
|
private:
|
|
void DestroyShadow(CShadowWnd*);
|
|
CShadowWnd* CreateShadow(BOOL bHoriz, CRect rc, CRect rcExclude, CWnd* pShadowOwner, BOOL bControlPopup, int nLevel);
|
|
|
|
private:
|
|
LPFNUPDATELAYEREDWINDOW m_pfnUpdateLayeredWindow;
|
|
CShadowList* m_pShadows;
|
|
BOOL m_bAlphaShadow;
|
|
int m_nShadowOptions;
|
|
COLORREF m_clrShadowFactor;
|
|
|
|
friend class CShadowWnd;
|
|
};
|
|
|
|
|
|
AFX_INLINE int CXTPShadowManager::GetShadowOptions() const {
|
|
return m_nShadowOptions;
|
|
}
|
|
AFX_INLINE void CXTPShadowManager::SetShadowOptions(int nOptions) {
|
|
m_nShadowOptions = nOptions;
|
|
}
|
|
AFX_INLINE void CXTPShadowManager::SetShadowColor(COLORREF clrShadow) {
|
|
m_clrShadowFactor = clrShadow;
|
|
}
|
|
|
|
|
|
|
|
#endif //#if !defined(__XTPHOOKMANAGER_H__)
|