home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / spmio10.zip / gcc2 / stdwin / stdframe.cc < prev    next >
C/C++ Source or Header  |  1994-08-28  |  2KB  |  91 lines

  1.  
  2. #include "stdframe.h"
  3.  
  4. class StdFrameAux
  5. {
  6. public:
  7.   static MRESULT FrameWindowProcedure (HWND, unsigned long, MPARAM, MPARAM);
  8. };
  9.  
  10. MRESULT StdFrameAux::FrameWindowProcedure (HWND frame, unsigned long msg,
  11.                        MPARAM mp1, MPARAM mp2)
  12. {
  13.   StdFrame *instance = (StdFrame *) WinQueryWindowPtr (frame, QWL_USER);
  14.   return instance->frame_message (msg, mp1, mp2);
  15. }
  16.  
  17. StdFrame::StdFrame ()
  18. : is_attached (0)
  19. {
  20. }
  21.  
  22. StdFrame::~StdFrame ()
  23. {
  24.   if (is_attached)
  25.     detach ();
  26. }
  27.  
  28. MRESULT StdFrame::frame_message (unsigned long amsg, MPARAM amp1, MPARAM amp2)
  29. {
  30.   unsigned long save_msg = msg;
  31.   MPARAM save_mp1 = mp1;
  32.   MPARAM save_mp2 = mp2;
  33.   msg = amsg;
  34.   mp1 = amp1;
  35.   mp2 = amp2;
  36.   MRESULT ret;
  37.   
  38.   switch (msg)
  39.     {
  40.     case WM_WINDOWPOSCHANGED:
  41.       framemsg_windowposchanged ((SWP *) mp1, (unsigned) mp2);
  42.       ret = 0;
  43.       break;
  44.     case WM_QUERYTRACKINFO:
  45.       ret = (MRESULT)
  46.     framemsg_querytrackinfo (SHORT1FROMMP (mp1), (TRACKINFO *) mp2);
  47.       break;
  48.     default:
  49.       ret = default_frame_message ();
  50.     }
  51.   
  52.   msg = save_msg;
  53.   mp1 = save_mp1;
  54.   mp2 = save_mp2;
  55.   return ret;
  56. }
  57.  
  58. virtual MRESULT StdFrame::default_frame_message ()
  59. {
  60.   return old_wndproc (frame, msg, mp1, mp2);
  61. }
  62.  
  63. void StdFrame::framemsg_windowposchanged (SWP *, unsigned)
  64. {
  65.   default_frame_message ();
  66. }
  67.  
  68. int StdFrame::framemsg_querytrackinfo (unsigned short, TRACKINFO *)
  69. {
  70.   return (int) default_frame_message ();
  71. }
  72.  
  73. void StdFrame::attach (HWND aframe)
  74. {
  75.   if (is_attached)
  76.     detach ();
  77.   frame = aframe;
  78.   is_attached = 1;
  79.   WinSetWindowPtr (frame, QWL_USER, this);
  80.   old_wndproc = WinSubclassWindow (frame, StdFrameAux::FrameWindowProcedure);
  81. }
  82.  
  83. void StdFrame::detach ()
  84. {
  85.   if (is_attached)
  86.     {
  87.       is_attached = 0;
  88.       WinSubclassWindow (frame, old_wndproc);
  89.     }
  90. }
  91.