CPOLY.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*** 
  2. *cpoly.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 CPoly class.
  14. *
  15. *  The CPoly class defines a number of methods and exposes them for
  16. *  external programmability via IDispatch,
  17. *
  18. *  methods:
  19. *    DRAW - draw the polygon
  20. *    RESET - delete all points from the polygon
  21. *
  22. *    ADDPOINT(X, Y) - add a point with coordinates (x,y) to the polygon
  23. *
  24. *    ENUMPOINTS - return a collection of the polygon's points
  25. *
  26. *    GETXORIGIN - get and set the X origin of the polygon
  27. *    SETXORIGIN
  28. *
  29. *    GETYORIGIN - get and set the Y origin of the polygon
  30. *    SETYORIGIN
  31. *
  32. *    GETWIDTH - get and set the line width of the polygon
  33. *    SETWIDTH
  34. *
  35. *  UNDONE: update description
  36. *
  37. *Implementation Notes:
  38. *
  39. *****************************************************************************/
  40. #ifndef CLASS
  41. # ifdef __TURBOC__
  42. #  define CLASS class huge
  43. # else
  44. #  define CLASS class FAR
  45. # endif
  46. #endif
  47. class CPoint;
  48. CLASS CPoly : public IDispatch
  49. {
  50. public:
  51.     static CPoly FAR* Create();
  52.     /* IUnknown methods */
  53.     STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppvObj);
  54.     STDMETHOD_(unsigned long, AddRef)(void);
  55.     STDMETHOD_(unsigned long, Release)(void);
  56.     /* IDispatch methods */
  57.     STDMETHOD(GetTypeInfoCount)(unsigned int FAR* pcTypeInfo);
  58.     STDMETHOD(GetTypeInfo)(
  59.       unsigned int iTypeInfo,
  60.       LCID lcid,
  61.       ITypeInfo FAR* FAR* ppTypeInfo);
  62.     STDMETHOD(GetIDsOfNames)(
  63.       REFIID riid,
  64.       OLECHAR FAR* FAR* rgszNames,
  65.       unsigned int cNames,
  66.       LCID lcid,
  67.       DISPID FAR* rgdispid);
  68.     STDMETHOD(Invoke)(
  69.       DISPID dispidMember,
  70.       REFIID riid,
  71.       LCID lcid,
  72.       unsigned short wFlags,
  73.       DISPPARAMS FAR* pdispparams,
  74.       VARIANT FAR* pvarResult,
  75.       EXCEPINFO FAR* pexcepinfo,
  76.       unsigned int FAR* puArgErr);
  77.     /* Introduced methods */
  78.     virtual void  METHODCALLTYPE EXPORT Draw(void);
  79.     virtual void  METHODCALLTYPE EXPORT Reset(void);
  80.     // add a point with the given 'x' and 'y' coordinates
  81.     virtual HRESULT METHODCALLTYPE EXPORT AddPoint(short x, short y);
  82.     // return a collection of the polygon's points
  83.     virtual IUnknown FAR* METHODCALLTYPE EXPORT EnumPoints(void);
  84.     // get/set the polygon's X origin property
  85.     virtual short METHODCALLTYPE EXPORT GetXOrigin(void);
  86.     virtual void  METHODCALLTYPE EXPORT SetXOrigin(short x);
  87.     // get/set the polygon's Y origin property
  88.     virtual short METHODCALLTYPE EXPORT GetYOrigin(void);
  89.     virtual void  METHODCALLTYPE EXPORT SetYOrigin(short y);
  90.     virtual short METHODCALLTYPE EXPORT GetWidth(void);
  91.     virtual void  METHODCALLTYPE EXPORT SetWidth(short width);
  92.     virtual short METHODCALLTYPE EXPORT get_red(void);
  93.     virtual void  METHODCALLTYPE EXPORT set_red(short red);
  94.     virtual short METHODCALLTYPE EXPORT get_green(void);
  95.     virtual void  METHODCALLTYPE EXPORT set_green(short green);
  96.     virtual short METHODCALLTYPE EXPORT get_blue(void);
  97.     virtual void  METHODCALLTYPE EXPORT set_blue(short blue);
  98.     // Debug method
  99.     virtual void  METHODCALLTYPE EXPORT Dump(void);
  100.     virtual void  METHODCALLTYPE EXPORT Quit(void);
  101. public: 
  102.     // Draw all polygons.
  103.     static void PolyDraw(void);
  104.     // Release all polygons.
  105.     static void PolyTerm(void);
  106.     // Dump all polygons to dbwin.
  107.     static void PolyDump(void);
  108. private:
  109.     CPoly();
  110.     short m_xorg;
  111.     short m_yorg;
  112.     short m_width;
  113.     short m_red;
  114.     short m_green;
  115.     short m_blue;
  116.     unsigned long m_refs;
  117.     unsigned int m_cPoints;
  118.     ITypeInfo FAR* m_ptinfo;
  119.     POINTLINK FAR* m_ppointlink;
  120.     POINTLINK FAR* m_ppointlinkLast;
  121. };
  122. // DISPIDs for the members and properties available via IDispatch.
  123. //
  124. enum IDMEMBER_CPOLY {
  125.     IDMEMBER_CPOLY_DRAW = 1,
  126.     IDMEMBER_CPOLY_RESET,
  127.     IDMEMBER_CPOLY_ADDPOINT,
  128.     IDMEMBER_CPOLY_ENUMPOINTS,
  129.     IDMEMBER_CPOLY_GETXORIGIN,
  130.     IDMEMBER_CPOLY_SETXORIGIN,
  131.     IDMEMBER_CPOLY_GETYORIGIN,
  132.     IDMEMBER_CPOLY_SETYORIGIN,
  133.     IDMEMBER_CPOLY_GETWIDTH,
  134.     IDMEMBER_CPOLY_SETWIDTH,
  135.     IDMEMBER_CPOLY_GETRED,
  136.     IDMEMBER_CPOLY_SETRED,
  137.     IDMEMBER_CPOLY_GETGREEN,
  138.     IDMEMBER_CPOLY_SETGREEN,
  139.     IDMEMBER_CPOLY_GETBLUE,
  140.     IDMEMBER_CPOLY_SETBLUE,
  141.     IDMEMBER_CPOLY_DUMP,
  142.     IDMEMBER_CPOLY_QUIT,
  143.     IDMEMBER_CPOLY_MAX
  144. };
  145. // CPoly method indices
  146. //
  147. enum IMETH_CPOLY {
  148.     IMETH_CPOLY_QUERYINTERFACE = 0,
  149.     IMETH_CPOLY_ADDREF,
  150.     IMETH_CPOLY_RELEASE,
  151.     IMETH_CPOLY_GETTYPEINFOCOUNT,
  152.     IMETH_CPOLY_GETTYPEINFO,
  153.     IMETH_CPOLY_GETIDSOFNAMES,
  154.     IMETH_CPOLY_INVOKE,
  155.     IMETH_CPOLY_DRAW,
  156.     IMETH_CPOLY_RESET,
  157.     IMETH_CPOLY_ADDPOINT,
  158.     IMETH_CPOLY_ENUMPOINTS,
  159.     IMETH_CPOLY_GETXORIGIN,
  160.     IMETH_CPOLY_SETXORIGIN,
  161.     IMETH_CPOLY_GETYORIGIN,
  162.     IMETH_CPOLY_SETYORIGIN,
  163.     IMETH_CPOLY_GETWIDTH,
  164.     IMETH_CPOLY_SETWIDTH,
  165.     IMETH_CPOLY_GETRED,
  166.     IMETH_CPOLY_SETRED,
  167.     IMETH_CPOLY_GETGREEN,
  168.     IMETH_CPOLY_SETGREEN,
  169.     IMETH_CPOLY_GETBLUE,
  170.     IMETH_CPOLY_SETBLUE,
  171.     IMETH_CPOLY_DUMP,
  172.     IMETH_CPOLY_QUIT,
  173.     IMETH_CPOLY_MAX
  174. };
  175. // structure used to link together polygons
  176. //
  177. struct POLYLINK {
  178.     POLYLINK FAR* next;
  179.     CPoly FAR* ppoly;
  180. };
  181. // The CPoly class factory
  182. //
  183. CLASS CPolyCF : public IClassFactory
  184. {
  185. public:
  186.     static IClassFactory FAR* Create();
  187.     /* IUnknown methods */
  188.     STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
  189.     STDMETHOD_(unsigned long, AddRef)(void);
  190.     STDMETHOD_(unsigned long, Release)(void);
  191.     /* IClassFactory methods */
  192.     STDMETHOD(CreateInstance)(
  193.       IUnknown FAR* pUnkOuter, REFIID riid, void FAR* FAR* ppv);
  194. #ifdef _MAC
  195.     STDMETHOD(LockServer)(unsigned long fLock);
  196. #else
  197.     STDMETHOD(LockServer)(BOOL fLock);
  198. #endif
  199. private:
  200.     CPolyCF();
  201.     unsigned long m_refs;
  202. };