home *** CD-ROM | disk | FTP | other *** search
- // SubclassWnd.cpp: implementation of the CSubclassWnd class.
- //
- //////////////////////////////////////////////////////////////////////
-
- #include "stdafx.h"
- #include "SubclassWnd.h"
-
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
-
- CSubclassWnd::CSubclassWnd()
- {
- m_hInstance = GetModuleHandle(NULL);
- m_hWnd = NULL;
- m_wpOldWndProc = NULL;
- // init the ThunkData with the this pointer so that this can be subclassed
- ThunkInit(m_Thunk, this);
- }
-
- CSubclassWnd::~CSubclassWnd()
- {
- if(m_wpOldWndProc || m_hWnd)
- OnDestroy();
- }
-
- bool CSubclassWnd::Init(HWND hSubclassWnd)
- {// begin Init
- // save HWND
- if(!hSubclassWnd)
- return false;
- m_hWnd = hSubclassWnd;
- // subclass the window
- m_wpOldWndProc = (WNDPROC)SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG)(void *)m_Thunk);
- if(!m_wpOldWndProc)
- return false;
- return true;
- }// end Init
-
- LRESULT CSubclassWnd::WndProc(HWND hWnd,UINT nMessage,WPARAM wParam,LPARAM lParam)
- {// begin WndProc
- switch(nMessage)
- {// begin nMessage switch
- case WM_DESTROY:
- OnDestroy();
- break;
- }// end nMessage swtich
- return CallWindowProc(m_wpOldWndProc,hWnd, nMessage, wParam, lParam);
- }// end WndProc
-
- void CSubclassWnd::OnDestroy()
- {// begin OnDestroy
- // remove subclassing
- if(m_wpOldWndProc)
- {
- SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG)m_wpOldWndProc);
- m_wpOldWndProc = NULL;
- }
- m_hWnd = NULL;
- }// end OnDestroy
-
- HWND CSubclassWnd::GetSafeHwnd()
- {// begin GetSafeHwnd
- return m_hWnd;
- }// end GetSafeHwnd
-