home *** CD-ROM | disk | FTP | other *** search
/ PC Administrator / spravce.iso / TaskModule / src / SubclassWnd.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-08-13  |  1.6 KB  |  66 lines

  1. // SubclassWnd.cpp: implementation of the CSubclassWnd class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #include "stdafx.h"
  6. #include "SubclassWnd.h"
  7.  
  8. //////////////////////////////////////////////////////////////////////
  9. // Construction/Destruction
  10. //////////////////////////////////////////////////////////////////////
  11.  
  12. CSubclassWnd::CSubclassWnd()
  13. {
  14.     m_hInstance = GetModuleHandle(NULL);
  15.     m_hWnd = NULL;
  16.     m_wpOldWndProc = NULL;
  17.     // init the ThunkData with the this pointer so that this can be subclassed
  18.     ThunkInit(m_Thunk, this);
  19. }
  20.  
  21. CSubclassWnd::~CSubclassWnd()
  22. {
  23.     if(m_wpOldWndProc || m_hWnd)
  24.         OnDestroy();
  25. }
  26.  
  27. bool CSubclassWnd::Init(HWND hSubclassWnd)
  28. {// begin Init
  29.     // save HWND
  30.     if(!hSubclassWnd)
  31.         return false;
  32.     m_hWnd = hSubclassWnd;
  33.     // subclass the window
  34.     m_wpOldWndProc = (WNDPROC)SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG)(void *)m_Thunk);
  35.     if(!m_wpOldWndProc)
  36.         return false;
  37.     return true;
  38. }// end Init
  39.  
  40. LRESULT CSubclassWnd::WndProc(HWND hWnd,UINT nMessage,WPARAM wParam,LPARAM lParam)
  41. {// begin WndProc
  42.     switch(nMessage)
  43.     {// begin nMessage switch
  44.     case WM_DESTROY:
  45.         OnDestroy();
  46.         break;
  47.     }// end nMessage swtich
  48.     return CallWindowProc(m_wpOldWndProc,hWnd, nMessage, wParam, lParam);
  49. }// end WndProc
  50.  
  51. void CSubclassWnd::OnDestroy()
  52. {// begin OnDestroy
  53.     // remove subclassing
  54.     if(m_wpOldWndProc)
  55.     {
  56.         SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG)m_wpOldWndProc);
  57.         m_wpOldWndProc = NULL;
  58.     }
  59.     m_hWnd = NULL;
  60. }// end OnDestroy
  61.  
  62. HWND CSubclassWnd::GetSafeHwnd()
  63. {// begin GetSafeHwnd
  64.     return m_hWnd;
  65. }// end GetSafeHwnd
  66.