IPOLY8.H

/* 
* IPOLY8.H
* Polyline Object Chapter 8
*
* Definition of an IPolyline interface for a Polyline object.
* This custom interface and is only supported from DLL-based
* objects.
*
* Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
*
* Kraig Brockschmidt, Microsoft
* Internet : kraigb@microsoft.com
* Compuserve: >INTERNET:kraigb@microsoft.com
*/


#ifndef _IPOLY8_H_
#define _IPOLY8_H_


//Versioning.
#define VERSIONMAJOR 2
#define VERSIONMINOR 0
#define VERSIONCURRENT 0x00020000

#define CPOLYLINEPOINTS 20

//Version 2.0 Polyline Structure
typedef struct tagPOLYLINEDATA
{
WORD wVerMaj; //Major version number
WORD wVerMin; //Minor version number
WORD cPoints; //Number of points
short fReserved; //Previously fDrawEntire
RECTS rc; //Rectangle of figure
POINTS rgpt[CPOLYLINEPOINTS]; //Points on 0-32767 grid

//Version 2.0 additions
COLORREF rgbBackground; //Background color
COLORREF rgbLine; //Line color
short iLineStyle; //Line style
} POLYLINEDATA, *PPOLYLINEDATA;

#define CBPOLYLINEDATA sizeof(POLYLINEDATA)



#undef INTERFACE
#define INTERFACE IPolylineAdviseSink8


/*
* When someone initializes a polyline and is interested in receiving
* notifications on events, then they provide one of these objects.
*/

DECLARE_INTERFACE_(IPolylineAdviseSink8, IUnknown)
{
//IUnknown members
STDMETHOD(QueryInterface) (THIS_ REFIID, PPVOID) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;

//Advise members.
STDMETHOD_(void,OnPointChange) (THIS) PURE;
STDMETHOD_(void,OnSizeChange) (THIS) PURE;
STDMETHOD_(void,OnDataChange) (THIS) PURE;
STDMETHOD_(void,OnColorChange) (THIS) PURE;
STDMETHOD_(void,OnLineStyleChange) (THIS) PURE;
};

typedef IPolylineAdviseSink8 *PPOLYLINEADVISESINK8;


#undef INTERFACE
#define INTERFACE IPolyline8

DECLARE_INTERFACE_(IPolyline8, IUnknown)
{
//IUnknown members
STDMETHOD(QueryInterface) (THIS_ REFIID, PPVOID) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;

//IPolyline members

//File-related members use IPersistStorage, IPersistStreamInit

//Data transfer members:
STDMETHOD(DataSet) (THIS_ PPOLYLINEDATA, BOOL, BOOL) PURE;
STDMETHOD(DataGet) (THIS_ PPOLYLINEDATA) PURE;
STDMETHOD(DataSetMem) (THIS_ HGLOBAL, BOOL, BOOL, BOOL) PURE;
STDMETHOD(DataGetMem) (THIS_ HGLOBAL *) PURE;
STDMETHOD(RenderBitmap) (THIS_ HBITMAP *) PURE;
STDMETHOD(RenderMetafile) (THIS_ HMETAFILE *) PURE;
STDMETHOD(RenderMetafilePict) (THIS_ HGLOBAL *) PURE;

//Manipulation members:
STDMETHOD(Init) (THIS_ HWND, LPRECT, DWORD, UINT) PURE;
STDMETHOD(New) (THIS) PURE;
STDMETHOD(Undo) (THIS) PURE;
STDMETHOD(Window) (THIS_ HWND *) PURE;

STDMETHOD(RectGet) (THIS_ LPRECT) PURE;
STDMETHOD(SizeGet) (THIS_ LPRECT) PURE;
STDMETHOD(RectSet) (THIS_ LPRECT, BOOL) PURE;
STDMETHOD(SizeSet) (THIS_ LPRECT, BOOL) PURE;

STDMETHOD(ColorSet) (THIS_ UINT, COLORREF, COLORREF *) PURE;
STDMETHOD(ColorGet) (THIS_ UINT, COLORREF *) PURE;

STDMETHOD(LineStyleSet) (THIS_ UINT, UINT *) PURE;
STDMETHOD(LineStyleGet) (THIS_ UINT *) PURE;
};

typedef IPolyline8 *PPOLYLINE8;


//Error values for data transfer functions
#define POLYLINE_E_INVALIDPOINTER \
MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 1)
#define POLYLINE_E_READFAILURE \
MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 2)
#define POLYLINE_E_WRITEFAILURE \
MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 3)


//Color indices for color member functions
#define POLYLINECOLOR_BACKGROUND 0
#define POLYLINECOLOR_LINE 1


#endif //_IPOLY8_H_