home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
msdn_vcb
/
samples
/
vc98
/
sdk
/
com
/
inole2
/
chap05
/
polyline
/
polyline.h
< prev
next >
Wrap
C/C++ Source or Header
|
1995-05-03
|
7KB
|
243 lines
/*
* 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_