home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / owlsrc.pak / OLEMDIFR.CPP < prev    next >
C/C++ Source or Header  |  1997-07-23  |  3KB  |  110 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // (C) Copyright 1994 by Borland International, All Rights Reserved
  4. //
  5. //   Implementation of class TOleMDIFrame.
  6. //----------------------------------------------------------------------------
  7. #define INC_OLE2
  8. #include <owl/owlpch.h>
  9. #include <owl/decmdifr.h>
  10. #include <owl/statusba.h>
  11. #include <owl/ocfevent.h>
  12. #include <owl/uihandle.h>
  13. #include <owl/olemdifr.h>
  14.  
  15. DIAG_DECLARE_GROUP(OwlOleMenu);
  16.  
  17. DEFINE_RESPONSE_TABLE2(TOleMDIFrame, TOleFrame, TMDIFrame)
  18.   EV_WM_ACTIVATEAPP,
  19.   EV_OC_APPINSMENUS,
  20. END_RESPONSE_TABLE;
  21.  
  22. TOleMDIFrame::TOleMDIFrame(const char far* title,
  23.                            TResId          menuResId,
  24.                            TMDIClient&     clientWnd,
  25.                            bool            trackMenuSelection,
  26.                            TModule*        module)
  27. :
  28.   TOleFrame(title, &clientWnd, trackMenuSelection, module),
  29.   TMDIFrame(title, menuResId, clientWnd, module)
  30. {
  31. }
  32.  
  33. //
  34. //
  35. //
  36. TOleMDIFrame::~TOleMDIFrame()
  37. {
  38. }
  39.  
  40. //
  41. // Forward Activate messages to OcApp to allow it to notify any embedded servers
  42. // about being activated
  43. //
  44. void
  45. TOleMDIFrame::EvActivateApp(bool active, HTASK hTask)
  46. {
  47.   OcApp->EvActivate(active);
  48.   TMDIFrame::EvActivateApp(active, hTask);
  49. }
  50.  
  51. //
  52. // Insert our menus into a provided menu bar, possibly merging them with a
  53. // child and servers.
  54. //
  55. bool
  56. TOleMDIFrame::EvOcAppInsMenus(TOcMenuDescr far& sharedMenu)
  57. {
  58.   if (HOldMenu)
  59.     return true;
  60.  
  61.   // Recreate a temporary composite menu for frame and MDI child
  62.   //
  63.   TMenuDescr compMenuDesc; // empty menudescr
  64.   if (GetMenuDescr())
  65.     compMenuDesc.Merge(*GetMenuDescr());
  66.   const TMenuDescr* childMenu = GetClientWindow()->GetActiveMDIChild()->GetMenuDescr();
  67.   if (childMenu)
  68.     compMenuDesc.Merge(*childMenu);
  69.  
  70.   // Mask off the server menus
  71.   //
  72.   compMenuDesc.Merge(TMenuDescr(0,  0, -1, 0, -1, 0, -1));
  73.  
  74.   // Merge into the OLE shared menubar
  75.   //
  76.   TMenuDescr shMenuDescr(sharedMenu.HMenu,
  77.                          sharedMenu.Width[0],
  78.                          sharedMenu.Width[1],
  79.                          sharedMenu.Width[2],
  80.                          sharedMenu.Width[3],
  81.                          sharedMenu.Width[4],
  82.                          sharedMenu.Width[5]);
  83.   shMenuDescr.Merge(compMenuDesc);
  84.  
  85.   // Copy the shared menu widths back to the OC struct
  86.   //
  87.   for (int i = 0; i < 6; i++)
  88.     sharedMenu.Width[i] = shMenuDescr.GetGroupCount(i);
  89.  
  90.   // Save the container popups so they can be destroyed later
  91.   //
  92.   StashContainerPopups(shMenuDescr);
  93.  
  94.   TRACEX(OwlOleMenu, 0, "MDI merged menu " << hex << (uint)sharedMenu.HMenu);
  95.   return true;
  96. }
  97.  
  98. LRESULT
  99. TOleMDIFrame::DefWindowProc(uint message, WPARAM wParam, LPARAM lParam)
  100. {
  101.   //
  102.   // ::DefFrameProc() will response to WM_SIZE by making the MDI client the
  103.   // same size as the client rectangle; this conflicts with what TLayoutWindow
  104.   // has done
  105.   //
  106.   return message == WM_SIZE ?
  107.                       0 :
  108.                       TMDIFrame::DefWindowProc(message, wParam, lParam);
  109. }
  110.