Subclass.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:3k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. //-----------------------------------------------------------------------//
  2. // This is a part of the GuiLib MFC Extention.  //
  3. // Modified  :  Francisco Campos  //
  4. // (C) 2002 Francisco Campos <www.beyondata.com> All rights reserved     //
  5. // This code is provided "as is", with absolutely no warranty expressed  //
  6. // or implied. Any use is at your own risk.  //
  7. // You must obtain the author's consent before you can include this code //
  8. // in a software library.  //
  9. // If the source code in  this file is used in any application  //
  10. // then acknowledgement must be made to the author of this program  //
  11. // fcampos@tutopia.com  //
  12. //-----------------------------------------------------------------------//
  13. ////////////////////////////////////////////////////////////////
  14. // PixieLib(TM) Copyright 1997-1998 Paul DiLascia
  15. // If this code works, it was written by Paul DiLascia.
  16. // If not, I don't know who wrote it.
  17. //
  18. #ifndef _SUBCLASSW_H
  19. #define _SUBCLASSW_H
  20. //////////////////
  21. // Generic class to hook messages on behalf of a CWnd.
  22. // Once hooked, all messages go to CSubclassWnd::WindowProc before going
  23. // to the window. Specific subclasses can trap messages and do something.
  24. //
  25. // To use:
  26. //
  27. // * Derive a class from CSubclassWnd.
  28. //
  29. // * Override CSubclassWnd::WindowProc to handle messages. Make sure you call
  30. //   CSubclassWnd::WindowProc if you don't handle the message, or your
  31. //   window will never get messages. If you write seperate message handlers,
  32. //   you can call Default() to pass the message to the window.
  33. //
  34. // * Instantiate your derived class somewhere and call HookWindow(pWnd)
  35. //   to hook your window, AFTER it has been created.
  36. //   To unhook, call HookWindow(NULL).
  37. //
  38. // This is a very important class, crucial to many of the widgets Window
  39. // widgets implemented in PixieLib. To see how it works, look at the HOOK
  40. // sample program.
  41. //
  42. class AFX_EXT_CLASS CSubclassWnd : public CObject {
  43. public:
  44. DECLARE_DYNAMIC(CSubclassWnd);
  45. CSubclassWnd();
  46. ~CSubclassWnd();
  47. // Subclass a window. Hook(NULL) to unhook (automatic on WM_NCDESTROY)
  48. BOOL HookWindow(HWND  hwnd);
  49. BOOL HookWindow(CWnd* pWnd) { return HookWindow(pWnd->GetSafeHwnd()); }
  50. BOOL IsHooked() { return m_hWnd!=NULL; }
  51. friend LRESULT CALLBACK HookWndProc(HWND, UINT, WPARAM, LPARAM);
  52. friend class CSubclassWndMap;
  53. #ifdef _DEBUG
  54. virtual void AssertValid() const;
  55. virtual void Dump(CDumpContext& dc) const;
  56. #endif
  57. protected:
  58. HWND m_hWnd; // the window hooked
  59. WNDPROC m_pOldWndProc; // ..and original window proc
  60. CSubclassWnd* m_pNext; // next in chain of hooks for this window
  61. // Override this to handle messages in specific handlers
  62. virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp);
  63. LRESULT Default(); // call this at the end of handler fns
  64. };
  65. #endif // _SUBCLASSW_H