SUBCLASS.H
上传用户:gzfeiyu199
上传日期:2021-09-15
资源大小:68k
文件大小:2k
源码类别:

编辑框

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////
  2. // 1997 Microsoft Sytems Journal
  3. // If this code works, it was written by Paul DiLascia.
  4. // If not, I don't know who wrote it.
  5. //
  6. #if !defined(SUBCLASS_H_INCLUDED)
  7. #define SUBCLASS_H_INCLUDED
  8. #if _MSC_VER >= 1000
  9. #pragma once
  10. #endif // _MSC_VER >= 1000
  11. //////////////////
  12. // Generic class to hook messages on behalf of a CWnd.
  13. // Once hooked, all messages go to CSubclassWnd::WindowProc before going
  14. // to the window. Specific subclasses can trap messages and do something.
  15. //
  16. // To use:
  17. //
  18. // * Derive a class from CSubclassWnd.
  19. //
  20. // * Override CSubclassWnd::WindowProc to handle messages. Make sure you call
  21. //   CSubclassWnd::WindowProc if you don't handle the message, or your
  22. //   window will never get messages. If you write seperate message handlers,
  23. //   you can call Default() to pass the message to the window.
  24. //
  25. // * Instantiate your derived class somewhere and call HookWindow(pWnd)
  26. //   to hook your window, AFTER it has been created.
  27. //   To unhook, call HookWindow(NULL).
  28. //
  29. // This is a very important class, crucial to many of the widgets Window
  30. // widgets implemented in PixieLib. To see how it works, look at the HOOK
  31. // sample program.
  32. //
  33. class CLASS_EXPORT CSubclassWnd : public CObject {
  34. public:
  35. DECLARE_DYNAMIC(CSubclassWnd);
  36. CSubclassWnd();
  37. ~CSubclassWnd();
  38. // Subclass a window. Hook(NULL) to unhook (automatic on WM_NCDESTROY)
  39. BOOL HookWindow(CWnd* pRealWnd);
  40. BOOL IsHooked() { return m_pWndHooked!=NULL; }
  41. friend LRESULT CALLBACK HookWndProc(HWND, UINT, WPARAM, LPARAM);
  42. friend class CSubclassWndMap;
  43. protected:
  44. CWnd* m_pWndHooked; // the window hooked
  45. WNDPROC m_pOldWndProc; // ..and original window proc
  46. CSubclassWnd* m_pNext; // next in chain of hooks for this window
  47. // Override this to handle messages in specific handlers
  48. virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp);
  49. LRESULT Default(); // call this at the end of handler fns
  50. };
  51. #endif // SUBCLASS_H_INCLUDED