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

Windows编程

开发平台:

Visual C++

  1. /*+==========================================================================
  2.   File:      BALL.H
  3.   Summary:   Include file for the aggregatable COBall COM object class.
  4.              COBall offers a main standard IUnknown interface (basic COM
  5.              object features) and the custom IBall interface (moving
  6.              ball-related features).  This multiple interface COM Object
  7.              Class is achieved via the technique of nested classes.  The
  8.              implementation of the IBall interface is nested inside of the
  9.              COBall Class.
  10.              This file also declares some internal C++ classes (CXForm and
  11.              CBallThread) that provide internal support for the custom
  12.              IBall interface.
  13.              For a comprehensive tutorial code tour of this module's
  14.              contents and offerings see the tutorial FRESERVE.HTM file.
  15.              For more specific technical details on the internal workings
  16.              see the comments dispersed throughout the module's source code.
  17.   Functions:
  18.   Classes:   CXForm, CBallThread, COBall.
  19.   Origin:    4-5-96: atrent - Editor-inheritance from CAR.H in
  20.              the DLLSERVE Tutorial Code Sample. Also borrows from
  21.              the GDIDEMO sample in the Win32 samples of the Win32 SDK.
  22. ----------------------------------------------------------------------------
  23.   This file is part of the Microsoft COM Tutorial Code Samples.
  24.   Copyright (C) Microsoft Corporation, 1997.  All rights reserved.
  25.   This source code is intended only as a supplement to Microsoft
  26.   Development Tools and/or on-line documentation.  See these other
  27.   materials for detailed information regarding Microsoft code samples.
  28.   THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  29.   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  30.   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  31.   PARTICULAR PURPOSE.
  32. ==========================================================================+*/
  33. #if !defined(BALL_H)
  34. #define BALL_H
  35. #ifdef __cplusplus
  36. enum { MAX_BALLTHREADS = 64, BALL_MOVE_SKEW = 5 };
  37. /*C+C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C
  38.   Class:    CXForm
  39.   Summary:  A utility class with methods for performing point
  40.             transformations on points that represent space/location in two
  41.             dimensions.
  42.   Methods:  Clear
  43.               Clears the transformation matrix.
  44.             Scale
  45.               Set transformation to multiply by a scale factor.
  46.             Trans
  47.               Perform transformation.
  48.             Point
  49.               Get point.
  50.             CXForm
  51.               Constructor.
  52.             ~CXForm
  53.               Destructor.
  54. C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C-C*/
  55. class CXForm
  56. {
  57.   private:
  58.     int XForm[3][3];
  59.   public:
  60.     CXForm(void) {};
  61.     ~CXForm(void) {};
  62.     void Clear(void);
  63.     void Scale(int xScale, int yScale);
  64.     void Trans(int xTrans, int yTrans);
  65.     void Point(POINT* pPoint);
  66. };
  67. /*C+C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C
  68.   Class:    CBallThread
  69.   Summary:  A class for simple objects used to store properties of threads.
  70.             An array of these is used to remember the threads that came
  71.             visiting the CBall object.
  72.   Methods:  CBallThread
  73.               Constructor.
  74.             ~CBallThread
  75.               Destructor.
  76. C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C-C*/
  77. class CBallThread
  78. {
  79.   public:
  80.     DWORD Id;
  81.     COLORREF Color;
  82.     CBallThread(void) {};
  83.     ~CBallThread(void) {};
  84. };
  85. /*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
  86.   ObjectClass: COBall
  87.   Summary:     COM object class for COBall COM objects.  COM objects of
  88.                this class offer IBall interface features, Reset, Move, and
  89.                GetBall. The mulitple interfaces on this COM object are
  90.                constructed via the nested interface classes technique.
  91.   Interfaces:  IUnknown
  92.                  Standard interface providing COM object features.
  93.                IBall
  94.                  Basic Ball operation features.
  95.   Aggregation: Yes, COBall COM Objects are aggregatable by passing
  96.                a non-NULL pUnkOuter IUnknown pointer into the constructor.
  97. O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
  98. class COBall : public IUnknown, public CThreaded
  99. {
  100.   public:
  101.     // Main Object Constructor & Destructor.
  102.     COBall(IUnknown* pUnkOuter, CServer* pServer);
  103.     ~COBall(void);
  104.     // IUnknown methods. Main object, non-delegating.
  105.     STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  106.     STDMETHODIMP_(ULONG) AddRef(void);
  107.     STDMETHODIMP_(ULONG) Release(void);
  108.   private:
  109.     // We declare nested class interface implementations here.
  110.     class CImpIBall : public IBall, public CThreaded
  111.     {
  112.       public:
  113.         // Interface Implementation Constructor & Destructor.
  114.         CImpIBall(COBall* pBackObj, IUnknown* pUnkOuter);
  115.         ~CImpIBall(void);
  116.         // IUnknown methods.
  117.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  118.         STDMETHODIMP_(ULONG) AddRef(void);
  119.         STDMETHODIMP_(ULONG) Release(void);
  120.         // IBall methods.
  121.         STDMETHODIMP Reset(RECT* pNewRect, short nBallSize);
  122.         STDMETHODIMP GetBall(POINT* pOrg, POINT* pExt, COLORREF* pcrColor);
  123.         STDMETHODIMP Move(BOOL bAlive);
  124.       private:
  125.         // Data private to this COBall interface implementation of IBall.
  126.         COBall*      m_pBackObj;     // Parent Object back pointer.
  127.         IUnknown*    m_pUnkOuter;    // Outer unknown for Delegation.
  128.         // The following private data and methods constitute the working
  129.         // heart of COBall as an actual application object.
  130.         BOOL         m_bAlive;
  131.         RECT         m_WinRect;
  132.         int          m_nWidth;
  133.         int          m_nHeight;
  134.         int          m_xDirection;
  135.         int          m_yDirection;
  136.         BOOL         m_bNewPosition;
  137.         int          m_xPosition;
  138.         int          m_yPosition;
  139.         short        m_xSkew;
  140.         short        m_ySkew;
  141.         COLORREF     m_crColor;
  142.         CXForm       m_XForm;
  143.         CBallThread  m_aBallThreads[MAX_BALLTHREADS];
  144.         // Private methods for internal use.
  145.         void GetDimensions(POINT*);
  146.         void SetDimensions(int,int);
  147.         void GetDirection(POINT*);
  148.         void SetDirection(int,int);
  149.         void GetPosition(POINT*);
  150.         void SetPosition(int,int);
  151.         void CheckBounce(void);
  152.         void FindThread(void);
  153.     };
  154.     // Make the otherwise private and nested IBall interface implementation
  155.     // a friend to COM object instantiations of this selfsame COBall
  156.     // COM object class.
  157.     friend CImpIBall;
  158.     // Private data of COBall COM objects.
  159.     // Nested IBall implementation instantiation.  This IBall interface
  160.     // is instantiated inside this COBall object as a native interface.
  161.     CImpIBall        m_ImpIBall;
  162.     // Main Object reference count.
  163.     ULONG            m_cRefs;
  164.     // Outer unknown (aggregation & delegation).
  165.     IUnknown*        m_pUnkOuter;
  166.     // Pointer to this component server's control object.
  167.     CServer*         m_pServer;
  168. };
  169. typedef COBall* PCOBall;
  170. #endif // __cplusplus
  171. #endif // BALL_H