home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / tutsamp / perclien / perclien.txt < prev    next >
Text File  |  1997-09-09  |  9KB  |  163 lines

  1.  
  2. PERCLIEN - Client of Persistent Components
  3.  
  4.  
  5. SUMMARY
  6. =======
  7.  
  8. The PERCLIEN sample completes a sequence of four samples that cover
  9. persistent COM objects. The first three samples discuss three COM servers
  10. that each house COM objects having a different kind of object persistence.
  11. The first sample, PERSERVE, shows how to use the IPersistStream interface
  12. to give COPageList COM objects their persistence in a stream of a
  13. structured storage compound file.  The second sample, PERTEXT, shows how
  14. to use the IPersistStreamInit interface is used to give COTextPage COM
  15. object their persistence in streams. The IPersistStreamInit::InitNew
  16. method is covered in detail. The third sample, PERDRAW, shows how to use
  17. the IPersistStorage interface to give CODrawPage COM objects their
  18. persistence in substorages of a compound file. The
  19. IPersistStorage::HandsOffStorage and IPersistStorage::SaveCompleted
  20. methods are covered in detail. This sample, PERCLIEN, integrates the use
  21. of the three previous servers into a single COM client application.
  22.  
  23. The PERCLIEN client uses the components in the PERSERVE, PERTEXT, and
  24. PERDRAW to build a document editing application that presents a list of
  25. pages to users. The user can add, delete, open, and name the page items in
  26. the list. When an item is opened, the content appears in a separate window
  27. for editing. The separate edit windows are child windows of PERCLIEN's
  28. main window. Two types of pages are supported: text pages and drawing
  29. pages.
  30.  
  31. PERCLIEN provides the graphical user interface for editing the page list
  32. as well as for editing the content of the two page types. PERCLIEN's
  33. CGuiList C++ object encapsulates the editing of the page list in
  34. PERCLIEN's main window. CGuiList controls the server-side COPageList
  35. object in PERSERVE. PERCLIEN's CGuiText C++ object encapsulates the
  36. editing of text pages in separate child windows. CGuiText controls the
  37. server-side COTextPage object in PERTEXT. PERCLIEN's CGuiDraw C++ object
  38. encapsulates the editing of drawing pages in separate child windows.
  39. CGuiDraw controls the server-side CODrawPage object in PERDRAW.
  40.  
  41. The separate text page windows of CGuiText provide for the editing of text
  42. using the standard Win32 multi-line edit control. The separate drawing
  43. page windows of CGuiDraw provide the free-form line drawing functionality
  44. that appeared in the STOSERVE and STOCLIEN samples.
  45.  
  46. The PERCLIEN sample relies on each page's persistent COM object to load
  47. and store the page's content. PERCLIEN acquires a pointer to the
  48. IPersistStream interface on COPageList to control persistent stream
  49. storage of the page list. It acquires a pointer to the IPersistStreamInit
  50. interface on COTextPage to control persistent stream storage (with InitNew
  51. capability) of a text page. It acquires a pointer to the IPersistStorage
  52. interface on CODrawPage to control persistent storage in a substorage
  53. (with the HandsOffStorage protocol) of a drawing page.
  54.  
  55. PERCLIEN controls the use of the compound file and provides the COM
  56. objects on the server side with appropriate interface pointers for the
  57. storages or streams used to store the data. PERSERVE's COPageList COM
  58. object exposes the IPersistStream interface and receives an IStream
  59. pointer from PERCLIEN. PERTEXT's COTextPage COM object exposes the
  60. IPersistStreamInit interface and receives an IStream pointer by PERCLIEN.
  61. PERDRAW's CODrawPage COM object exposes the IPersistStorage interface and
  62. receives an IStorage pointer by PERCLIEN. These IStorage and IStream
  63. interfaces are not implemented inside PERCLIEN or PERSERVE: They are
  64. implemented by the COM libraries. When a pointer to one of these
  65. interfaces is obtained, their methods are essentially used as a set of
  66. services to operate on areas in a compound file. If you have not used
  67. streams (IStream) or storages (IStorage) in structured storage compound
  68. files, see the STOSERVE and STOCLIEN samples for coverage of this topic.
  69.  
  70. PERCLIEN manages its structured storage compound file as a kind of
  71. document file where the page list and the pages themselves are stored.
  72. PERCLIEN loads and saves its page list, text pages, and drawing pages in
  73. the structured storage of this compound file. The compound file has a
  74. unique format because of the various streams and storages used. PERCLIEN
  75. identifies these compound files as page files with a .PAG file extension.
  76.  
  77. The connectable-object technology that was shown in the CONSERVE and
  78. CONCLIEN samples is used between PERCLIEN and the COM objects in its
  79. servers. Thus, PERCLIEN implements custom event sink interfaces for the
  80. connectable objects in the servers: IPageListSink, ITextPageSink, and
  81. IDrawPageSink.
  82.  
  83. For functional descriptions and a tutorial code tour of PERCLIEN, see the
  84. Code Tour section in PERCLIEN.HTM. For details on the external user
  85. operation of PERCLIEN, see both the Usage and Operation sections in
  86. PERCLIEN.HTM. To read PERCLIEN.HTM, run TUTORIAL.EXE in the main tutorial
  87. directory and click the PERCLIEN lesson in the table of lessons. You can
  88. also do same thing by double-clicking the PERCLIEN.HTM file after locating
  89. it in the main tutorial directory in Windows Explorer. See also
  90. PERSERVE.HTM, PERTEXT.HTM, and PERDRAW.HTM in the main tutorial directory
  91. for more details on how these servers work and expose their services to
  92. PERCLIEN. The makefile for each of the servers automatically registers
  93. that server in the system registry, so you must build the PERSERVE,
  94. PERTEXT, and PERDRAW servers before you can run PERCLIEN.
  95.  
  96. For details on setting up your system to build and test the code samples
  97. in this COM Tutorial series, see TUTORIAL.HTM. The supplied MAKEFILE is
  98. Microsoft NMAKE-compatible. To create a debug build, issue the NMAKE
  99. command at the Command Prompt.
  100.  
  101. Usage
  102. -----
  103.  
  104. PERCLIEN is an application that you can execute directly from Windows in
  105. the normal manner or from the Command Prompt window. PERCLIEN accepts an
  106. optional file name parameter on the command line. For example:
  107.  
  108.   PERCLIEN c:\pages\mynotes.pag
  109.  
  110. Where mynotes.pag is a compound file containing pages of text and drawings
  111. previously made by PERCLIEN. If no file name argument is specified,
  112. PERCLIEN uses the default file name PERCLIEN.PAG and attempts to open it
  113. in the same directory as the executing PERCLIEN.EXE.
  114.  
  115.  
  116. FILES
  117. =====
  118.  
  119. Files          Description
  120.  
  121. PERCLIEN.TXT   This file.
  122. MAKEFILE       The generic makefile for building the code sample
  123.                application of this tutorial lesson.
  124. PERCLIEN.H     The include file for the PERCLIEN application. Contains
  125.                class declarations for main window and dialogs.
  126. PERCLIEN.CPP   The main implementation file for PERCLIEN.EXE. Has WinMain
  127.                and CMainWindow implementation and the main menu dispatching.
  128. PERCLIEN.RC    The application's resource definition file.
  129. PERCLIEN.ICO   The application's main icon resource.
  130. PERCLIEN.PAG   A default page file for the application (with two pages).
  131. RESDEF.H       Resource ID definitions for application menu, strings, etc.
  132. PENCIL.CUR     A pencil image for the drawing page window cursor.
  133. GUILIST.H      The class declaration for the CGuiList C++ class.
  134. GUILIST.CPP    Implementation file for the CGuiList C++ class. Has user
  135.                interface to handle the main page list display window.
  136. LISTWIN.H      The class declaration for the CListWin C++ class.
  137. LISTWIN.CPP    Implementation file for the CListWin C++ class.
  138.                Encapsulates the list box control used to show the page list.
  139. LISTSINK.H     The class declaration for the COPageListSink COM object class.
  140. LISTSINK.CPP   Implementation file for the COPageListSink COM object class.
  141.                Connectable object notifications of page list events are
  142.                handled by COPageListSink.
  143. PAGEFILE.H     The class declaration for the CPageFile C++ class.
  144. PAGEFILE.CPP   Implementation file for the CPageFile C++ class.
  145.                Encapsulates operations on the .PAG page list compound file.
  146. GUITEXT.H      The class declaration for the CGuiText C++ class.
  147. GUITEXT.CPP    Implementaton file for the CGuiText C++ class. Has the
  148.                user interface for the separate editing of text pages.
  149. TEXTWIN.H      The class declaration for the CTextWin C++ class.
  150. TEXTWIN.CPP    Implementation file for the CTextWin C++ class. Encapsulates
  151.                the text edit control used to edit text page.s
  152. TEXTSINK.H     The class declaration for the COTextPageSink COM object class.
  153. TEXTSINK.CPP   Implementation file for the COTextPageSink COM object class.
  154.                Connectable object notifications of text edit events are
  155.                handled by COTextPageSink.
  156. GUIDRAW.H      The class declaration for the CGuiDraw C++ class.
  157. GUIDRAW.CPP    Implementation file for the CGuiDraw C++ class. Has the
  158.                user interface for the separate drawing in draw pages.
  159. DRAWSINK.H     The class declaration for the CODrawPageSink COM object class.
  160. DRAWSINK.CPP   Implementation file for the CODrawPageSink COM object class.
  161.                Connectable object notifications of drawing-related events
  162.                are handled by COTextPageSink.
  163.