41 lines
1.1 KiB
C++
41 lines
1.1 KiB
C++
#pragma once
|
|
|
|
class GlwSubclassWnd;
|
|
|
|
class GlwSubclassWndMap : private CMapPtrToPtr
|
|
{
|
|
public:
|
|
GlwSubclassWndMap(){}
|
|
~GlwSubclassWndMap(){}
|
|
static GlwSubclassWndMap& GetHookMap();
|
|
void Add(HWND hwnd, GlwSubclassWnd* pSubclassWnd);
|
|
void Remove(GlwSubclassWnd* pSubclassWnd);
|
|
void RemoveAll(HWND hwnd);
|
|
GlwSubclassWnd* Lookup(HWND hwnd);
|
|
};
|
|
|
|
|
|
class GlwSubclassWnd : public CObject
|
|
{
|
|
public:
|
|
DECLARE_DYNAMIC(GlwSubclassWnd);
|
|
GlwSubclassWnd();
|
|
~GlwSubclassWnd();
|
|
|
|
// widget a window. Hook(NULL) to unhook (automatic on WM_NCDESTROY)
|
|
virtual BOOL HookWindow(HWND hwnd);
|
|
virtual BOOL HookWindow(CWnd* pWnd) { return HookWindow(pWnd->GetSafeHwnd()); }
|
|
virtual BOOL IsHooked() { return m_hWnd!=NULL; }
|
|
|
|
friend LRESULT CALLBACK HookWndProc(HWND, UINT, WPARAM, LPARAM);
|
|
friend class GlwSubclassWndMap;
|
|
|
|
protected:
|
|
HWND m_hWnd; // the window hooked
|
|
WNDPROC m_pOldWndProc; // and original window proc
|
|
GlwSubclassWnd* m_pNext; // next in chain of hooks for this window
|
|
|
|
virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp);
|
|
virtual LRESULT Default(); // call this at the end of handler fns
|
|
};
|