Subclass.h
上传用户:wlkj888
上传日期:2022-08-01
资源大小:806k
文件大小:3k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. /****************************************************************************
  2.  * *  
  3.  * GuiToolKit   *
  4.  *  (MFC extension) *  
  5.  * Created by Francisco Campos G. www.beyondata.com fcampos@beyondata.com *
  6.  *--------------------------------------------------------------------------*    
  7.  * *
  8.  * This program is free software;so you are free to use it any of your *
  9.  * applications (Freeware, Shareware, Commercial),but leave this header *
  10.  * intact. *
  11.  * *
  12.  * These files are provided "as is" without warranty of any kind. *
  13.  * *
  14.  *        GuiToolKit is forever FREE CODE !!!!! *
  15.  * *
  16.  *--------------------------------------------------------------------------*
  17.  * *
  18.  * Bug Fixes and improvements : (Add your name) *
  19.  * -Francisco Campos *
  20.  * *
  21.  ****************************************************************************/
  22. ////////////////////////////////////////////////////////////////
  23. // PixieLib(TM) Copyright 1997-1998 Paul DiLascia
  24. // If this code works, it was written by Paul DiLascia.
  25. // If not, I don't know who wrote it.
  26. //
  27. #ifndef _SUBCLASSW_H
  28. #define _SUBCLASSW_H
  29. //////////////////
  30. // Generic class to hook messages on behalf of a CWnd.
  31. // Once hooked, all messages go to CSubclassWnd::WindowProc before going
  32. // to the window. Specific subclasses can trap messages and do something.
  33. //
  34. // To use:
  35. //
  36. // * Derive a class from CSubclassWnd.
  37. //
  38. // * Override CSubclassWnd::WindowProc to handle messages. Make sure you call
  39. //   CSubclassWnd::WindowProc if you don't handle the message, or your
  40. //   window will never get messages. If you write seperate message handlers,
  41. //   you can call Default() to pass the message to the window.
  42. //
  43. // * Instantiate your derived class somewhere and call HookWindow(pWnd)
  44. //   to hook your window, AFTER it has been created.
  45. //   To unhook, call HookWindow(NULL).
  46. //
  47. // This is a very important class, crucial to many of the widgets Window
  48. // widgets implemented in PixieLib. To see how it works, look at the HOOK
  49. // sample program.
  50. //
  51. class GUILIBDLLEXPORT CSubclassWnd : public CObject 
  52. {
  53. public:
  54. DECLARE_DYNAMIC(CSubclassWnd);
  55. CSubclassWnd();
  56. ~CSubclassWnd();
  57. // Subclass a window. Hook(NULL) to unhook (automatic on WM_NCDESTROY)
  58. BOOL HookWindow(HWND  hwnd);
  59. BOOL HookWindow(CWnd* pWnd) { return HookWindow(pWnd->GetSafeHwnd()); }
  60. BOOL IsHooked() { return m_hWnd!=NULL; }
  61. friend LRESULT CALLBACK HookWndProc(HWND, UINT, WPARAM, LPARAM);
  62. friend class CSubclassWndMap;
  63. #ifdef _DEBUG
  64. virtual void AssertValid() const;
  65. virtual void Dump(CDumpContext& dc) const;
  66. #endif
  67. protected:
  68. HWND m_hWnd; // the window hooked
  69. WNDPROC m_pOldWndProc; // ..and original window proc
  70. CSubclassWnd* m_pNext; // next in chain of hooks for this window
  71. // Override this to handle messages in specific handlers
  72. virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp);
  73. LRESULT Default(); // call this at the end of handler fns
  74. };
  75. #endif // _SUBCLASSW_H