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 >
C/C++ Source or Header  |  1995-05-03  |  7KB  |  243 lines

  1. /*
  2.  * POLYLINE.H
  3.  * Polyline Component Chapter 5
  4.  *
  5.  * Definitions and function prototypes
  6.  *
  7.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  8.  *
  9.  * Kraig Brockschmidt, Microsoft
  10.  * Internet  :  kraigb@microsoft.com
  11.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  12.  */
  13.  
  14.  
  15. #ifndef _POLYLINE_H_
  16. #define _POLYLINE_H_
  17.  
  18. #define INC_CLASSLIB
  19. #define INC_CONTROLS
  20. #define CHAPTER5
  21. #include <inole.h>
  22. #include <ipoly5.h>
  23.  
  24.  
  25. //Classname
  26. #define SZCLASSPOLYLINE             TEXT("polyline")
  27.  
  28. #define HIMETRIC_PER_INCH           2540
  29. #define CCHPATHMAX                  256
  30.  
  31. //Window extra bytes and offsets
  32. #define CBPOLYLINEWNDEXTRA          (sizeof(LONG))
  33. #define PLWL_STRUCTURE              0
  34.  
  35.  
  36. //DLLPOLY.CPP
  37. int PASCAL LibMain(HINSTANCE, WORD, WORD, LPSTR);
  38.  
  39. //This class factory object creates Polyline objects.
  40.  
  41. class CPolylineClassFactory : public IClassFactory
  42.     {
  43.     protected:
  44.         ULONG           m_cRef;
  45.  
  46.     public:
  47.         CPolylineClassFactory(void);
  48.         ~CPolylineClassFactory(void);
  49.  
  50.         //IUnknown members
  51.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  52.         STDMETHODIMP_(ULONG) AddRef(void);
  53.         STDMETHODIMP_(ULONG) Release(void);
  54.  
  55.         //IClassFactory members
  56.         STDMETHODIMP         CreateInstance(LPUNKNOWN, REFIID
  57.                                  , PPVOID);
  58.         STDMETHODIMP         LockServer(BOOL);
  59.     };
  60.  
  61. typedef CPolylineClassFactory *PCPolylineClassFactory;
  62.  
  63.  
  64.  
  65. //POLYWIN.CPP
  66. LRESULT APIENTRY PolylineWndProc(HWND, UINT, WPARAM, LPARAM);
  67.  
  68.  
  69. //Forward class references
  70. class CImpIPolyline;
  71. typedef class CImpIPolyline *PCImpIPolyline;
  72.  
  73. class CImpIConnPtCont;
  74. typedef CImpIConnPtCont *PCImpIConnPtCont;
  75.  
  76. class CConnectionPoint;
  77. typedef CConnectionPoint *PCConnectionPoint;
  78.  
  79.  
  80. //POLYLINE.CPP
  81. class CPolyline : public IUnknown
  82.     {
  83.     friend LRESULT APIENTRY PolylineWndProc(HWND, UINT, WPARAM
  84.         , LPARAM);
  85.  
  86.     //Make any contained interfaces your friends
  87.     friend class CImpIPolyline;
  88.     friend class CImpIConnPtCont;
  89.     friend class CConnectionPoint;
  90.  
  91.     protected:
  92.         HWND            m_hWnd;
  93.         HINSTANCE       m_hInst;
  94.  
  95.         ULONG           m_cRef;         //Object reference count
  96.         LPUNKNOWN       m_pUnkOuter;    //Controlling Unknown
  97.         PFNDESTROYED    m_pfnDestroy;   //Function called on closure
  98.         BOOL            m_fDirty;       //Have we changed?
  99.         POLYLINEDATA    m_pl;           //Our actual data
  100.  
  101.         //Contained interfaces
  102.         PCImpIPolyline      m_pImpIPolyline;
  103.         PCImpIConnPtCont    m_pImpIConnPtCont;
  104.  
  105.         /*
  106.          * Connected sink:  only one per object.  We get this
  107.          * through our connection point.
  108.          */
  109.         IPolylineAdviseSink5   *m_pAdv;
  110.         PCConnectionPoint       m_pConnPt;
  111.  
  112.     protected:
  113.         void      PointScale(LPRECT, LPPOINTS, BOOL);
  114.         void      Draw(HDC, BOOL, BOOL);
  115.         void      RectConvertMappings(LPRECT, BOOL);
  116.  
  117.     public:
  118.         CPolyline(LPUNKNOWN, PFNDESTROYED, HINSTANCE);
  119.         ~CPolyline(void);
  120.  
  121.         BOOL      Init(void);
  122.  
  123.         //Non-delegating object IUnknown
  124.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  125.         STDMETHODIMP_(ULONG) AddRef(void);
  126.         STDMETHODIMP_(ULONG) Release(void);
  127.     };
  128.  
  129. typedef CPolyline *PCPolyline;
  130.  
  131.  
  132.  
  133.  
  134. //Interface implementations contained in the Polyline.
  135.  
  136. class CImpIPolyline : public IPolyline5
  137.     {
  138.     protected:
  139.         ULONG               m_cRef;      //Interface ref count
  140.         PCPolyline          m_pObj;      //Backpointer to object
  141.         LPUNKNOWN           m_pUnkOuter; //Controlling unknown
  142.  
  143.     public:
  144.         CImpIPolyline(PCPolyline, LPUNKNOWN);
  145.         ~CImpIPolyline(void);
  146.  
  147.         //IUnknown members.
  148.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  149.         STDMETHODIMP_(ULONG) AddRef(void);
  150.         STDMETHODIMP_(ULONG) Release(void);
  151.  
  152.         //File-related members:
  153.         STDMETHODIMP ReadFromFile(LPTSTR);
  154.         STDMETHODIMP WriteToFile (LPTSTR);
  155.  
  156.         //Data transfer members:
  157.         STDMETHODIMP DataSet(PPOLYLINEDATA, BOOL, BOOL);
  158.         STDMETHODIMP DataGet(PPOLYLINEDATA);
  159.         STDMETHODIMP DataSetMem(HGLOBAL, BOOL, BOOL, BOOL);
  160.         STDMETHODIMP DataGetMem(HGLOBAL *);
  161.  
  162.         STDMETHODIMP RenderBitmap(HBITMAP *);
  163.         STDMETHODIMP RenderMetafile(HMETAFILE *);
  164.         STDMETHODIMP RenderMetafilePict(HGLOBAL *);
  165.  
  166.         //Manipulation members:
  167.         STDMETHODIMP Init(HWND, LPRECT, DWORD, UINT);
  168.         STDMETHODIMP New(void);
  169.         STDMETHODIMP Undo(void);
  170.         STDMETHODIMP Window(HWND *);
  171.  
  172.         STDMETHODIMP RectGet(LPRECT);
  173.         STDMETHODIMP SizeGet(LPRECT);
  174.         STDMETHODIMP RectSet(LPRECT, BOOL);
  175.         STDMETHODIMP SizeSet(LPRECT, BOOL);
  176.  
  177.         STDMETHODIMP ColorSet(UINT, COLORREF, COLORREF *);
  178.         STDMETHODIMP ColorGet(UINT, COLORREF *);
  179.  
  180.         STDMETHODIMP LineStyleSet(UINT, UINT *);
  181.         STDMETHODIMP LineStyleGet(UINT *);
  182.     };
  183.  
  184.  
  185.  
  186. //IConnectionPointContainer Interface implementation
  187. class CImpIConnPtCont : public IConnectionPointContainer
  188.     {
  189.     private:
  190.         ULONG               m_cRef;      //Interface ref count
  191.         PCPolyline          m_pObj;      //Back pointer to object
  192.         LPUNKNOWN           m_pUnkOuter; //Controlling unknown
  193.  
  194.     public:
  195.         CImpIConnPtCont(PCPolyline, LPUNKNOWN);
  196.         ~CImpIConnPtCont(void);
  197.  
  198.         //IUnknown members
  199.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  200.         STDMETHODIMP_(DWORD) AddRef(void);
  201.         STDMETHODIMP_(DWORD) Release(void);
  202.  
  203.         //IConnectionPointContainer members
  204.         STDMETHODIMP EnumConnectionPoints(IEnumConnectionPoints **);
  205.         STDMETHODIMP FindConnectionPoint(REFIID, IConnectionPoint **);
  206.     };
  207.  
  208.  
  209. /*
  210.  * This connection point will only allow one connection,
  211.  * so it always returns the same connection key.  It also
  212.  * doesn't bother to implement enumerations.
  213.  */
  214.  
  215. #define CCONNMAX    1
  216. #define ADVISEKEY   72388       //Arbitrary
  217.  
  218. class CConnectionPoint : public IConnectionPoint
  219.     {
  220.     private:
  221.         ULONG           m_cRef;     //Object reference count
  222.         PCPolyline      m_pObj;     //Containing object.
  223.  
  224.     public:
  225.         CConnectionPoint(PCPolyline);
  226.         ~CConnectionPoint(void);
  227.  
  228.         //IUnknown members
  229.         STDMETHODIMP         QueryInterface(REFIID, LPVOID *);
  230.         STDMETHODIMP_(ULONG) AddRef(void);
  231.         STDMETHODIMP_(ULONG) Release(void);
  232.  
  233.         //IConnectionPoint members
  234.         STDMETHODIMP GetConnectionInterface(IID *);
  235.         STDMETHODIMP GetConnectionPointContainer
  236.             (IConnectionPointContainer **);
  237.         STDMETHODIMP Advise(LPUNKNOWN, DWORD *);
  238.         STDMETHODIMP Unadvise(DWORD);
  239.         STDMETHODIMP EnumConnections(IEnumConnections **);
  240.     };
  241.  
  242. #endif  //_POLYLINE_H_
  243.