home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c083 / 11.ddi / OWLSRC.PAK / SWINDOW.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-02  |  3.3 KB  |  138 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows - (C) Copyright 1991, 1993 by Borland International
  3. //   source\owl\swindobj.cpp
  4. //   Streamable object implementation for TWindow.
  5. //----------------------------------------------------------------------------
  6. #include <owl\owlpch.h>
  7. #include <owl\applicat.h>
  8. #include <owl\window.h>
  9. #include <owl\scroller.h>
  10.  
  11. extern WNDPROC CreateInstanceThunk(TWindow*);
  12.  
  13. IMPLEMENT_STREAMABLE(TWindow);
  14.  
  15. const int StreamIsTop      = 1;
  16. const int StreamIsTopChild = 2;
  17.  
  18. void *
  19. TWindow::Streamer::Read(ipstream& is, uint32 /*version*/) const
  20. {
  21.   TWindow* o = GetObject();
  22.   int flags;
  23.   is >> flags;
  24.   if (flags & StreamIsTop) {
  25.     o->ChildList = 0;   // indicate no children connected yet
  26.     return o;           // we only need to read our child list
  27.   }
  28.  
  29.   o->HWindow = 0;
  30.   o->Parent = 0;
  31.   o->SiblingList = 0;
  32.   o->ChildList = 0;
  33.   o->TransferBuffer = 0;
  34.   o->DefaultProc = 0;
  35.   o->hAccel = 0;
  36.   o->SetUniqueId();
  37.  
  38.   o->Application = GetApplicationObject();
  39.   o->Thunk = CreateInstanceThunk(o);
  40.  
  41.   is >> o->Module;
  42.   TResId TempId;
  43.   is >> TempId;
  44.   o->Title = TempId;
  45.   is >> o->Flags;
  46.  
  47.   if (o->IsFlagSet(wfFromResource)) {
  48.     o->DefaultProc = (WNDPROC)::DefWindowProc;
  49.     memset(&o->Attr, 0, sizeof(o->Attr));
  50.  
  51.   } else {
  52.     long  temp;
  53.     is >> o->Attr.Style >> o->Attr.ExStyle >>
  54.           o->Attr.X >> o->Attr.Y >> o->Attr.W >> o->Attr.H >> temp;
  55.     o->Attr.Param = (char far*)temp;
  56.  
  57.     o->DefaultProc = (WNDPROC)::DefWindowProc;
  58.   }
  59.  
  60.   is >> o->Attr.Id
  61.      >> o->Attr.Menu
  62.      >> o->Attr.AccelTable;
  63.  
  64.   is >> o->ZOrder;
  65.  
  66.   is >> o->Parent;
  67.   if (flags & StreamIsTopChild)
  68.     o->Parent->ChildList = o;  // set parent's child pointer to this
  69.   is >> o->ChildList;
  70.   is >> o->SiblingList;
  71.  
  72.   is >> o->Scroller;
  73.   if (o->Scroller)
  74.     o->Scroller->SetWindow(o);
  75.  
  76.   o->HCursor = 0;
  77.   is >> o->CursorModule >> o->CursorResId;
  78.   o->SetCursor(o->CursorModule, o->CursorResId);
  79.   is >> o->BkgndColor;
  80.  
  81.   return o;
  82. }
  83.  
  84. void
  85. TWindow::Streamer::Write(opstream& os) const
  86. {
  87.   TWindow* o = GetObject();
  88.  
  89.   o->AssignZOrder();
  90.   int flags = 0;
  91.   if (o->IsFlagSet(wfStreamTop) || o->IsFlagSet(wfMainWindow))
  92.     flags |= StreamIsTop;
  93.   else if ((o->Parent->IsFlagSet(wfStreamTop) || o->Parent->IsFlagSet(wfMainWindow))
  94.          && o->Parent->ChildList == o)
  95.     flags |= StreamIsTopChild;
  96.   os << flags;
  97.  
  98.   if (flags & StreamIsTop) {
  99.     return;
  100.   }
  101.  
  102.   os << o->Module;
  103.   os << TResId(o->Title);
  104.  
  105.   DWORD saveFlags = o->Flags;
  106.   if (o->HWindow)
  107.     saveFlags |= wfAutoCreate;
  108.   os << saveFlags;
  109.  
  110.   if (!o->IsFlagSet(wfFromResource)) {
  111.     DWORD saveStyle = o->Attr.Style &
  112.                       ~(WS_MINIMIZE | WS_MAXIMIZE | WS_DISABLED | WS_VISIBLE);
  113.  
  114.     if (o->HWindow)
  115.       saveStyle |= o->GetWindowLong(GWL_STYLE) &
  116.                    (WS_MINIMIZE | WS_MAXIMIZE | WS_DISABLED | WS_VISIBLE);
  117.  
  118.     os << saveStyle << o->Attr.ExStyle <<
  119.           o->Attr.X << o->Attr.Y << o->Attr.W << o->Attr.H <<
  120.           long(o->Attr.Param);
  121.   }
  122.  
  123.   os << o->Attr.Id
  124.      << o->Attr.Menu
  125.      << o->Attr.AccelTable;
  126.  
  127.   os << o->ZOrder;
  128.  
  129.   os << o->Parent;
  130.   os << o->ChildList;
  131.   os << o->SiblingList;
  132.  
  133.   os << o->Scroller;
  134.  
  135.   os << o->CursorModule << o->CursorResId;
  136.   os << o->BkgndColor;
  137. }
  138.