SAMPLE: Lines: OLE Automation Server that implements collections

LINES is an OLE Automation server application that implements collections.  
LINES allows a collection on lines to be drawn on a pane using OLE Automation. It exposes the
following objects.

Application object:
 Properties
   Application
   FullName
   Name
   Pane	        Returns the pane in the drawing window.
   Parent
   Visible
 Methods
   CreateLine	Returns a newly created Line object with no start or end point.
   CreatePoint	Returns a newly created Point object initialized to (0,0).

Pane object:
 Properties
   Lines	Returns a collection of all of the Line objects in the drawing.
   Points	Returns a collection of all of the Point objects in the drawing.
   MaxX	        Returns the maximum visible X coordinate value in twips.
   MaxY	        Returns the maximum visible Y coordinate value in twips.
 Methods
   Clear        Removes all of the Lines and Points from the drawing and refreshes the client area.  
                The result is a blank slate, as if the application had just been launched.
   Refresh      Clears the drawing area and redraws each of the lines in the Lines collection.

Line object:
 Properties
   Color	An RGB color.
   EndPoint	A Point object inidcating the end point for the line.
   StartPoint	A Point object indicating the start point for the line.
   Thickness	A thickness, represented in twips.

Point object:
 Properties
   x
   y

Lines collection:
 Standard collection properties and methods.  Objects that are added must be of type Line.  
 Objects returned are of type Line.
 Add and Remove cause redrawing of the pane.
 Adding a line causes two points to be added to the Points collection.  
 Removing a line may cause one or more points to be removed from the points collection.

Points collection:
 Standard collection properties and methods. Objects returned are of type Point.
 This collection does not allow addition and removal of members.
 The Points collection does not have duplicates. If there are two lines in the drawing 
 which share an end point (x, y), (x, y) only appears in the collection once.

The sample the following features:

 Supports dual interfaces which allows access of automation properties and methods through
  vtable binding and through IDispatch. 
 Provides Rich Error information for vtable-binding controllers. This is does by implementing
  ISupportErrorInfo and using IErrorInfo.
 Implements 2 collections.
 Implements active object registration using RegisterActiveObject and RevokeActiveObject. 
 Implements correct shut-down behavior. 
 Includes a .reg file which contains Lines.Application as progID.
 When created for automation, is invisible initially.


To compile:
-----------

Requires OLE 2.02 or later.
Use the external makefile called makefile to compile. 
In Win16, run the WXSRVER.EXE from \OLE2\BIN before running the makefile.
The makefile invokes mktyplib.exe that reads lines.odl and creates the type library,
lines.tlb. It then compliles the source files.

To run:
-------

Change lines.reg (or lines16.reg for Win16) to provide the full path of 
lines.exe and lines.tlb. 
Register lines.reg in the registration database by double-clicking it.

The VB 3.0 files in this directory will control the sample. Load vb.mak into
VB 3.0 and run. This will launch and control LINES. VB 3.0 uses late binding
(not vtable-binding) to control LINES. A vtable-binding controller for LINES
can be built along the lines of the HELLCTRL sample.

Files:
------

LINES.ODL   Object description language that describes the objects that LINES exposes.
TLB.H       Header file generated by mktyplib.exe
MAKEFILE    Makefile for project.

Other files implement the LINES automation server.
===========================================================================
