home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / oleaut / spoly2 / cpoint.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-05  |  3.5 KB  |  151 lines

  1. /*** 
  2. *cpoint.h
  3. *
  4. *  This is a part of the Microsoft Source Code Samples.
  5. *
  6. *  Copyright (C) 1992-1997 Microsoft Corporation. All rights reserved.
  7. *
  8. *  This source code is only intended as a supplement to Microsoft Development
  9. *  Tools and/or WinHelp documentation.  See these sources for detailed
  10. *  information regarding the Microsoft samples programs.
  11. *
  12. *Purpose:
  13. *  Definition of the CPoint class.
  14. *
  15. *  The CPoint object exposes two properties for programatic access
  16. *  via the IDispatch interface.
  17. *
  18. *  properties:
  19. *    X             - the 'x' coordinate of the point
  20. *    Y             - the 'y' coordinate of the point
  21. *
  22. *Implementation Notes:
  23. *
  24. *****************************************************************************/
  25.  
  26. #ifndef    CLASS
  27. #ifdef    __TURBOC__
  28. #define CLASS class huge
  29. #else
  30. #define CLASS class FAR
  31. #endif
  32. #endif
  33.  
  34. class CPoly;
  35.  
  36. CLASS CPoint : public IDispatch {
  37.     friend class CPoly;
  38.  
  39. public:
  40.     static CPoint FAR* Create();
  41.  
  42.     /* IUnknown methods */
  43.     STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppvObj);
  44.     STDMETHOD_(unsigned long, AddRef)(void);
  45.     STDMETHOD_(unsigned long, Release)(void);
  46.  
  47.     /* IDispatch methods */
  48.     STDMETHOD(GetTypeInfoCount)(unsigned int FAR* pcTypeInfo);
  49.  
  50.     STDMETHOD(GetTypeInfo)(
  51.       unsigned int iTypeInfo,
  52.       LCID lcid,
  53.       ITypeInfo FAR* FAR* ppTypeInfo);
  54.  
  55.     STDMETHOD(GetIDsOfNames)(
  56.       REFIID riid,
  57.       OLECHAR FAR* FAR* rgszNames,
  58.       unsigned int cNames,
  59.       LCID lcid,
  60.       DISPID FAR* rgdispid);
  61.  
  62.     STDMETHOD(Invoke)(
  63.       DISPID dispidMember,
  64.       REFIID riid,
  65.       LCID lcid,
  66.       unsigned short wFlags,
  67.       DISPPARAMS FAR* pdispparams,
  68.       VARIANT FAR* pvarResult,
  69.       EXCEPINFO FAR* pexcepinfo,
  70.       unsigned int FAR* pwArgErr);
  71.  
  72.     /* Introduced methods */
  73.  
  74.     virtual short METHODCALLTYPE EXPORT GetX(void);
  75.     virtual void  METHODCALLTYPE EXPORT SetX(short x);
  76.     virtual short METHODCALLTYPE EXPORT GetY(void);
  77.     virtual void  METHODCALLTYPE EXPORT SetY(short y);
  78.  
  79. private:
  80.     CPoint();
  81.  
  82.     unsigned long m_refs;
  83.  
  84.     short m_x;
  85.     short m_y;
  86.  
  87.     ITypeInfo FAR* m_ptinfo;
  88. };
  89.  
  90. // member DISPIDs
  91. //
  92. enum IDMEMBER_CPOINT {
  93.     IDMEMBER_CPOINT_GETX = 1,
  94.     IDMEMBER_CPOINT_SETX,
  95.     IDMEMBER_CPOINT_GETY,
  96.     IDMEMBER_CPOINT_SETY,
  97.     IDMEMBER_CPOINT_MAX
  98. };
  99.  
  100. // member indices - this is an enumeration of all members on CPoint
  101. //
  102. enum IMETH_CPOINT {
  103.     IMETH_CPOINT_QUERYINTERFACE = 0,
  104.     IMETH_CPOINT_ADDREF,
  105.     IMETH_CPOINT_RELEASE,
  106.     IMETH_CPOINT_GETTYPEINFOCOUNT,
  107.     IMETH_CPOINT_GETTYPEINFO,
  108.     IMETH_CPOINT_GETIDSOFNAMES,
  109.     IMETH_CPOINT_INVOKE,
  110.  
  111.     IMETH_CPOINT_GETX,
  112.     IMETH_CPOINT_SETX,
  113.     IMETH_CPOINT_GETY,
  114.     IMETH_CPOINT_SETY
  115. };
  116.  
  117. // structure used to link together lists of points
  118. //
  119. struct POINTLINK {
  120.     POINTLINK FAR* next;
  121.     CPoint FAR* ppoint;
  122. };
  123.  
  124.  
  125. // The CPoint Class Factory
  126. //
  127. CLASS CPointCF : public IClassFactory
  128. {
  129. public:
  130.     static IClassFactory FAR* Create();
  131.  
  132.     /* IUnknown methods */
  133.     STDMETHOD(QueryInterface)(REFIID iid, void FAR* FAR* ppv);
  134.     STDMETHOD_(unsigned long, AddRef)(void);
  135.     STDMETHOD_(unsigned long, Release)(void);
  136.  
  137.     /* IClassFactory methods */
  138.     STDMETHOD(CreateInstance)(
  139.       IUnknown FAR* pUnkOuter, REFIID iid, void FAR* FAR* ppv);
  140. #ifdef _MAC
  141.     STDMETHOD(LockServer)(unsigned long fLock);
  142. #else
  143.     STDMETHOD(LockServer)(BOOL fLock);
  144. #endif
  145.  
  146. private:
  147.     CPointCF();
  148.  
  149.     unsigned long m_refs;
  150. };
  151.