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 >
Wrap
Text File
|
1997-09-09
|
9KB
|
163 lines
PERCLIEN - Client of Persistent Components
SUMMARY
=======
The PERCLIEN sample completes a sequence of four samples that cover
persistent COM objects. The first three samples discuss three COM servers
that each house COM objects having a different kind of object persistence.
The first sample, PERSERVE, shows how to use the IPersistStream interface
to give COPageList COM objects their persistence in a stream of a
structured storage compound file. The second sample, PERTEXT, shows how
to use the IPersistStreamInit interface is used to give COTextPage COM
object their persistence in streams. The IPersistStreamInit::InitNew
method is covered in detail. The third sample, PERDRAW, shows how to use
the IPersistStorage interface to give CODrawPage COM objects their
persistence in substorages of a compound file. The
IPersistStorage::HandsOffStorage and IPersistStorage::SaveCompleted
methods are covered in detail. This sample, PERCLIEN, integrates the use
of the three previous servers into a single COM client application.
The PERCLIEN client uses the components in the PERSERVE, PERTEXT, and
PERDRAW to build a document editing application that presents a list of
pages to users. The user can add, delete, open, and name the page items in
the list. When an item is opened, the content appears in a separate window
for editing. The separate edit windows are child windows of PERCLIEN's
main window. Two types of pages are supported: text pages and drawing
pages.
PERCLIEN provides the graphical user interface for editing the page list
as well as for editing the content of the two page types. PERCLIEN's
CGuiList C++ object encapsulates the editing of the page list in
PERCLIEN's main window. CGuiList controls the server-side COPageList
object in PERSERVE. PERCLIEN's CGuiText C++ object encapsulates the
editing of text pages in separate child windows. CGuiText controls the
server-side COTextPage object in PERTEXT. PERCLIEN's CGuiDraw C++ object
encapsulates the editing of drawing pages in separate child windows.
CGuiDraw controls the server-side CODrawPage object in PERDRAW.
The separate text page windows of CGuiText provide for the editing of text
using the standard Win32 multi-line edit control. The separate drawing
page windows of CGuiDraw provide the free-form line drawing functionality
that appeared in the STOSERVE and STOCLIEN samples.
The PERCLIEN sample relies on each page's persistent COM object to load
and store the page's content. PERCLIEN acquires a pointer to the
IPersistStream interface on COPageList to control persistent stream
storage of the page list. It acquires a pointer to the IPersistStreamInit
interface on COTextPage to control persistent stream storage (with InitNew
capability) of a text page. It acquires a pointer to the IPersistStorage
interface on CODrawPage to control persistent storage in a substorage
(with the HandsOffStorage protocol) of a drawing page.
PERCLIEN controls the use of the compound file and provides the COM
objects on the server side with appropriate interface pointers for the
storages or streams used to store the data. PERSERVE's COPageList COM
object exposes the IPersistStream interface and receives an IStream
pointer from PERCLIEN. PERTEXT's COTextPage COM object exposes the
IPersistStreamInit interface and receives an IStream pointer by PERCLIEN.
PERDRAW's CODrawPage COM object exposes the IPersistStorage interface and
receives an IStorage pointer by PERCLIEN. These IStorage and IStream
interfaces are not implemented inside PERCLIEN or PERSERVE: They are
implemented by the COM libraries. When a pointer to one of these
interfaces is obtained, their methods are essentially used as a set of
services to operate on areas in a compound file. If you have not used
streams (IStream) or storages (IStorage) in structured storage compound
files, see the STOSERVE and STOCLIEN samples for coverage of this topic.
PERCLIEN manages its structured storage compound file as a kind of
document file where the page list and the pages themselves are stored.
PERCLIEN loads and saves its page list, text pages, and drawing pages in
the structured storage of this compound file. The compound file has a
unique format because of the various streams and storages used. PERCLIEN
identifies these compound files as page files with a .PAG file extension.
The connectable-object technology that was shown in the CONSERVE and
CONCLIEN samples is used between PERCLIEN and the COM objects in its
servers. Thus, PERCLIEN implements custom event sink interfaces for the
connectable objects in the servers: IPageListSink, ITextPageSink, and
IDrawPageSink.
For functional descriptions and a tutorial code tour of PERCLIEN, see the
Code Tour section in PERCLIEN.HTM. For details on the external user
operation of PERCLIEN, see both the Usage and Operation sections in
PERCLIEN.HTM. To read PERCLIEN.HTM, run TUTORIAL.EXE in the main tutorial
directory and click the PERCLIEN lesson in the table of lessons. You can
also do same thing by double-clicking the PERCLIEN.HTM file after locating
it in the main tutorial directory in Windows Explorer. See also
PERSERVE.HTM, PERTEXT.HTM, and PERDRAW.HTM in the main tutorial directory
for more details on how these servers work and expose their services to
PERCLIEN. The makefile for each of the servers automatically registers
that server in the system registry, so you must build the PERSERVE,
PERTEXT, and PERDRAW servers before you can run PERCLIEN.
For details on setting up your system to build and test the code samples
in this COM Tutorial series, see TUTORIAL.HTM. The supplied MAKEFILE is
Microsoft NMAKE-compatible. To create a debug build, issue the NMAKE
command at the Command Prompt.
Usage
-----
PERCLIEN is an application that you can execute directly from Windows in
the normal manner or from the Command Prompt window. PERCLIEN accepts an
optional file name parameter on the command line. For example:
PERCLIEN c:\pages\mynotes.pag
Where mynotes.pag is a compound file containing pages of text and drawings
previously made by PERCLIEN. If no file name argument is specified,
PERCLIEN uses the default file name PERCLIEN.PAG and attempts to open it
in the same directory as the executing PERCLIEN.EXE.
FILES
=====
Files Description
PERCLIEN.TXT This file.
MAKEFILE The generic makefile for building the code sample
application of this tutorial lesson.
PERCLIEN.H The include file for the PERCLIEN application. Contains
class declarations for main window and dialogs.
PERCLIEN.CPP The main implementation file for PERCLIEN.EXE. Has WinMain
and CMainWindow implementation and the main menu dispatching.
PERCLIEN.RC The application's resource definition file.
PERCLIEN.ICO The application's main icon resource.
PERCLIEN.PAG A default page file for the application (with two pages).
RESDEF.H Resource ID definitions for application menu, strings, etc.
PENCIL.CUR A pencil image for the drawing page window cursor.
GUILIST.H The class declaration for the CGuiList C++ class.
GUILIST.CPP Implementation file for the CGuiList C++ class. Has user
interface to handle the main page list display window.
LISTWIN.H The class declaration for the CListWin C++ class.
LISTWIN.CPP Implementation file for the CListWin C++ class.
Encapsulates the list box control used to show the page list.
LISTSINK.H The class declaration for the COPageListSink COM object class.
LISTSINK.CPP Implementation file for the COPageListSink COM object class.
Connectable object notifications of page list events are
handled by COPageListSink.
PAGEFILE.H The class declaration for the CPageFile C++ class.
PAGEFILE.CPP Implementation file for the CPageFile C++ class.
Encapsulates operations on the .PAG page list compound file.
GUITEXT.H The class declaration for the CGuiText C++ class.
GUITEXT.CPP Implementaton file for the CGuiText C++ class. Has the
user interface for the separate editing of text pages.
TEXTWIN.H The class declaration for the CTextWin C++ class.
TEXTWIN.CPP Implementation file for the CTextWin C++ class. Encapsulates
the text edit control used to edit text page.s
TEXTSINK.H The class declaration for the COTextPageSink COM object class.
TEXTSINK.CPP Implementation file for the COTextPageSink COM object class.
Connectable object notifications of text edit events are
handled by COTextPageSink.
GUIDRAW.H The class declaration for the CGuiDraw C++ class.
GUIDRAW.CPP Implementation file for the CGuiDraw C++ class. Has the
user interface for the separate drawing in draw pages.
DRAWSINK.H The class declaration for the CODrawPageSink COM object class.
DRAWSINK.CPP Implementation file for the CODrawPageSink COM object class.
Connectable object notifications of drawing-related events
are handled by COTextPageSink.