home *** CD-ROM | disk | FTP | other *** search
- /*
- * POLYLINE.H
- * Polyline Component Chapter 5
- *
- * Definitions and function prototypes
- *
- * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
- *
- * Kraig Brockschmidt, Microsoft
- * Internet : kraigb@microsoft.com
- * Compuserve: >INTERNET:kraigb@microsoft.com
- */
-
-
- #ifndef _POLYLINE_H_
- #define _POLYLINE_H_
-
- #define INC_CLASSLIB
- #define INC_CONTROLS
- #define CHAPTER5
- #include <inole.h>
- #include <ipoly5.h>
-
-
- //Classname
- #define SZCLASSPOLYLINE TEXT("polyline")
-
- #define HIMETRIC_PER_INCH 2540
- #define CCHPATHMAX 256
-
- //Window extra bytes and offsets
- #define CBPOLYLINEWNDEXTRA (sizeof(LONG))
- #define PLWL_STRUCTURE 0
-
-
- //DLLPOLY.CPP
- int PASCAL LibMain(HINSTANCE, WORD, WORD, LPSTR);
-
- //This class factory object creates Polyline objects.
-
- class CPolylineClassFactory : public IClassFactory
- {
- protected:
- ULONG m_cRef;
-
- public:
- CPolylineClassFactory(void);
- ~CPolylineClassFactory(void);
-
- //IUnknown members
- STDMETHODIMP QueryInterface(REFIID, PPVOID);
- STDMETHODIMP_(ULONG) AddRef(void);
- STDMETHODIMP_(ULONG) Release(void);
-
- //IClassFactory members
- STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID
- , PPVOID);
- STDMETHODIMP LockServer(BOOL);
- };
-
- typedef CPolylineClassFactory *PCPolylineClassFactory;
-
-
-
- //POLYWIN.CPP
- LRESULT APIENTRY PolylineWndProc(HWND, UINT, WPARAM, LPARAM);
-
-
- //Forward class references
- class CImpIPolyline;
- typedef class CImpIPolyline *PCImpIPolyline;
-
- class CImpIConnPtCont;
- typedef CImpIConnPtCont *PCImpIConnPtCont;
-
- class CConnectionPoint;
- typedef CConnectionPoint *PCConnectionPoint;
-
-
- //POLYLINE.CPP
- class CPolyline : public IUnknown
- {
- friend LRESULT APIENTRY PolylineWndProc(HWND, UINT, WPARAM
- , LPARAM);
-
- //Make any contained interfaces your friends
- friend class CImpIPolyline;
- friend class CImpIConnPtCont;
- friend class CConnectionPoint;
-
- protected:
- HWND m_hWnd;
- HINSTANCE m_hInst;
-
- ULONG m_cRef; //Object reference count
- LPUNKNOWN m_pUnkOuter; //Controlling Unknown
- PFNDESTROYED m_pfnDestroy; //Function called on closure
- BOOL m_fDirty; //Have we changed?
- POLYLINEDATA m_pl; //Our actual data
-
- //Contained interfaces
- PCImpIPolyline m_pImpIPolyline;
- PCImpIConnPtCont m_pImpIConnPtCont;
-
- /*
- * Connected sink: only one per object. We get this
- * through our connection point.
- */
- IPolylineAdviseSink5 *m_pAdv;
- PCConnectionPoint m_pConnPt;
-
- protected:
- void PointScale(LPRECT, LPPOINTS, BOOL);
- void Draw(HDC, BOOL, BOOL);
- void RectConvertMappings(LPRECT, BOOL);
-
- public:
- CPolyline(LPUNKNOWN, PFNDESTROYED, HINSTANCE);
- ~CPolyline(void);
-
- BOOL Init(void);
-
- //Non-delegating object IUnknown
- STDMETHODIMP QueryInterface(REFIID, PPVOID);
- STDMETHODIMP_(ULONG) AddRef(void);
- STDMETHODIMP_(ULONG) Release(void);
- };
-
- typedef CPolyline *PCPolyline;
-
-
-
-
- //Interface implementations contained in the Polyline.
-
- class CImpIPolyline : public IPolyline5
- {
- protected:
- ULONG m_cRef; //Interface ref count
- PCPolyline m_pObj; //Backpointer to object
- LPUNKNOWN m_pUnkOuter; //Controlling unknown
-
- public:
- CImpIPolyline(PCPolyline, LPUNKNOWN);
- ~CImpIPolyline(void);
-
- //IUnknown members.
- STDMETHODIMP QueryInterface(REFIID, PPVOID);
- STDMETHODIMP_(ULONG) AddRef(void);
- STDMETHODIMP_(ULONG) Release(void);
-
- //File-related members:
- STDMETHODIMP ReadFromFile(LPTSTR);
- STDMETHODIMP WriteToFile (LPTSTR);
-
- //Data transfer members:
- STDMETHODIMP DataSet(PPOLYLINEDATA, BOOL, BOOL);
- STDMETHODIMP DataGet(PPOLYLINEDATA);
- STDMETHODIMP DataSetMem(HGLOBAL, BOOL, BOOL, BOOL);
- STDMETHODIMP DataGetMem(HGLOBAL *);
-
- STDMETHODIMP RenderBitmap(HBITMAP *);
- STDMETHODIMP RenderMetafile(HMETAFILE *);
- STDMETHODIMP RenderMetafilePict(HGLOBAL *);
-
- //Manipulation members:
- STDMETHODIMP Init(HWND, LPRECT, DWORD, UINT);
- STDMETHODIMP New(void);
- STDMETHODIMP Undo(void);
- STDMETHODIMP Window(HWND *);
-
- STDMETHODIMP RectGet(LPRECT);
- STDMETHODIMP SizeGet(LPRECT);
- STDMETHODIMP RectSet(LPRECT, BOOL);
- STDMETHODIMP SizeSet(LPRECT, BOOL);
-
- STDMETHODIMP ColorSet(UINT, COLORREF, COLORREF *);
- STDMETHODIMP ColorGet(UINT, COLORREF *);
-
- STDMETHODIMP LineStyleSet(UINT, UINT *);
- STDMETHODIMP LineStyleGet(UINT *);
- };
-
-
-
- //IConnectionPointContainer Interface implementation
- class CImpIConnPtCont : public IConnectionPointContainer
- {
- private:
- ULONG m_cRef; //Interface ref count
- PCPolyline m_pObj; //Back pointer to object
- LPUNKNOWN m_pUnkOuter; //Controlling unknown
-
- public:
- CImpIConnPtCont(PCPolyline, LPUNKNOWN);
- ~CImpIConnPtCont(void);
-
- //IUnknown members
- STDMETHODIMP QueryInterface(REFIID, PPVOID);
- STDMETHODIMP_(DWORD) AddRef(void);
- STDMETHODIMP_(DWORD) Release(void);
-
- //IConnectionPointContainer members
- STDMETHODIMP EnumConnectionPoints(IEnumConnectionPoints **);
- STDMETHODIMP FindConnectionPoint(REFIID, IConnectionPoint **);
- };
-
-
- /*
- * This connection point will only allow one connection,
- * so it always returns the same connection key. It also
- * doesn't bother to implement enumerations.
- */
-
- #define CCONNMAX 1
- #define ADVISEKEY 72388 //Arbitrary
-
- class CConnectionPoint : public IConnectionPoint
- {
- private:
- ULONG m_cRef; //Object reference count
- PCPolyline m_pObj; //Containing object.
-
- public:
- CConnectionPoint(PCPolyline);
- ~CConnectionPoint(void);
-
- //IUnknown members
- STDMETHODIMP QueryInterface(REFIID, LPVOID *);
- STDMETHODIMP_(ULONG) AddRef(void);
- STDMETHODIMP_(ULONG) Release(void);
-
- //IConnectionPoint members
- STDMETHODIMP GetConnectionInterface(IID *);
- STDMETHODIMP GetConnectionPointContainer
- (IConnectionPointContainer **);
- STDMETHODIMP Advise(LPUNKNOWN, DWORD *);
- STDMETHODIMP Unadvise(DWORD);
- STDMETHODIMP EnumConnections(IEnumConnections **);
- };
-
- #endif //_POLYLINE_H_
-