home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 December / PCWKCD1296.iso / vjplusb / activex / inetsdk / samples / axscript / spruuids / src / game.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-15  |  10.9 KB  |  273 lines

  1. //---------------------------------------------------------------------------
  2. // Game.h
  3. //---------------------------------------------------------------------------
  4. // Sample spr program
  5. //---------------------------------------------------------------------------
  6. // (C) Copyright 1992-1996 by Microsoft Corporation.  All rights reserved.
  7. //
  8. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
  9. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
  10. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
  11. // PARTICULAR PURPOSE.
  12. //---------------------------------------------------------------------------
  13.  
  14. //---------------------------------------------------------------------------
  15. // Forward Delcares
  16. //---------------------------------------------------------------------------
  17. class CDisplay;
  18. class CSpriteClass;
  19. class CSprite;
  20. class CScore;
  21. class CGameOA;
  22.  
  23.  
  24. //---------------------------------------------------------------------------
  25. //
  26. //---------------------------------------------------------------------------
  27. DEFINE_GUID(IID_IGameSubObjects, 0xb54f3741, 0x5b07, 0x11cf, 0xa4, 0xb0, 0x0, 0xaa, 0x0, 0x4a, 0x55, 0xe8);
  28.  
  29.  
  30. //---------------------------------------------------------------------------
  31. // the CGame class
  32. //---------------------------------------------------------------------------
  33. class CGame : public COleAuto, 
  34.               public IActiveScriptSite, public IActiveScriptSiteWindow,
  35.               public IProvideMultipleClassInfo
  36.   {
  37.   friend class CGameOA;
  38.  
  39. public:
  40.   static HRESULT CGame::CreateGame(HINSTANCE hinst, HWND hwnd, HWND hwndPS, HWND hwndStat,
  41.                                    IOleComponentManager *pcm, CGame **ppgameOut);
  42.   CGame(HINSTANCE hinst, HWND hwnd, HWND hwndPS, HWND hwndStat, IOleComponentManager *pcm);
  43.   ~CGame();
  44.   void Close(void);
  45.  
  46.   // *** IUnknown methods ***
  47.   STDMETHOD(QueryInterface)(REFIID riid, void** ppvObj);
  48.   STDMETHOD_(ULONG, AddRef)(void);
  49.   STDMETHOD_(ULONG, Release)(void);
  50.   inline IUnknown  *GetUnknown(void)  {return (IDispatch *)(COleAuto *)this;};
  51.   inline IDispatch *GetDispatch(void) {return (IDispatch *)(COleAuto *)this;};
  52.  
  53.   // *** IDispatch methods ***
  54.   STDMETHOD(GetTypeInfoCount)(UINT *pctinfo)
  55.     { return COleAuto::GetTypeInfoCount(pctinfo); };
  56.   STDMETHOD(GetTypeInfo)(UINT itinfo, LCID lcid, ITypeInfo **pptinfoOut)
  57.     { return COleAuto::GetTypeInfo(itinfo, lcid, pptinfoOut); };
  58.   STDMETHOD(GetIDsOfNames)(REFIID iid, OLECHAR **rgszNames, UINT cnames, LCID lcid, DISPID *rgdispid);
  59.   STDMETHOD(Invoke)(DISPID dispid, REFIID iid, LCID lcid, WORD wFlags, DISPPARAMS *pdispparams, VARIANT *pVarResult, EXCEPINFO *pexcepinfo, UINT *puArgErr);
  60.  
  61.   // Override required by COleAuto:
  62.   virtual ITypeInfo **GetTinfoClsAddr(void) { return &g_ptinfoClsGame; };
  63.   virtual ITypeInfo **GetTinfoIntAddr(void) { return &g_ptinfoIntGame; };
  64.   virtual HRESULT GetTypeLibInfo(HINSTANCE *phinstOut, const GUID **pplibidOut, 
  65.                                  SHORT *pwMajLibOut, SHORT *pwMinLibOut,
  66.                                  const CLSID **ppclsidOut, const IID **ppiidOut,
  67.                                  ITypeLib ***ppptlOut);
  68.   virtual IDispatch *GetPrimary() {return this->GetDispatch(); };
  69.  
  70.   // *** IProvideClassInfo methods ***
  71.   STDMETHOD(GetClassInfo)(ITypeInfo** pptinfoOut);
  72.   // *** IProvideClassInfo2 methods ***
  73.   STDMETHOD(GetGUID)(DWORD dwGuidKind, GUID* pGUID);
  74.   // *** IProvideMultipleClassInfo methods ***
  75.   STDMETHOD(GetMultiTypeInfoCount)(ULONG *pcti);
  76.   STDMETHOD(GetInfoOfIndex)(ULONG iti, DWORD dwFlags, ITypeInfo** pptiCoClass, DWORD* pdwTIFlags, ULONG* pcdispidReserved, IID* piidPrimary, IID* piidSource);
  77.  
  78. // ##### BEGIN ACTIVEX SCRIPTING SUPPORT #####
  79.   // *** IActiveScriptSite methods ***
  80.   STDMETHOD(GetLCID)(LCID *plcid);
  81.   STDMETHOD(GetItemInfo)(LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown **ppiunkItem, ITypeInfo **ppti);
  82.   STDMETHOD(GetDocVersionString)(BSTR *pszVersion);
  83.   STDMETHOD(RequestItems)(void);
  84.   STDMETHOD(RequestTypeLibs)(void);
  85.   STDMETHOD(OnScriptTerminate)(const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo);
  86.   STDMETHOD(OnStateChange)(SCRIPTSTATE ssScriptState);
  87.   STDMETHOD(OnScriptError)(IActiveScriptError *pscripterror);
  88.   STDMETHOD(OnEnterScript)(void);
  89.   STDMETHOD(OnLeaveScript)(void);
  90.  
  91.   // *** IActiveScriptSiteWindow methods ***
  92.   STDMETHOD(GetWindow)(HWND *phwnd);
  93.   STDMETHOD(EnableModeless)(BOOL fEnable);
  94. // #####  END  ACTIVEX SCRIPTING SUPPORT #####
  95.  
  96.   class CGameOA *m_pgameoa;
  97.  
  98.   // *** General Methods ***
  99.   BOOL    DlgProc(  HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
  100.   LRESULT PSWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
  101.   void    NewLevel(void);
  102.   void    NewGame(void);
  103.   BOOL    Pause(int pause);
  104.   BOOL    FQueryTerminate(BOOL fPromptUser);
  105.   void    GameOver(void);
  106.   HRESULT ParseFile(char *pszFileName, LPCOLESTR pstrItemName);
  107.   HRESULT CreateScriptEngine(LPCOLESTR pstrItemName);
  108.   HRESULT BuildTypeInfo(void);
  109.  
  110.   // *** Member Variables ***
  111.   HINSTANCE  m_hinst;
  112.   HWND       m_hwndDlg;
  113.   HWND       m_hwndPS;
  114.   HWND       m_hwndStat;
  115.   CScore    *m_pscore;
  116.   CDisplay  *m_pdisp;
  117.   UINT       m_cref;
  118.   VARIANT    m_varTag;
  119.   IOleComponentManager *m_pcm;
  120. // ##### BEGIN ACTIVEX SCRIPTING SUPPORT #####
  121.   IActiveScript        *m_ps;
  122.   IActiveScriptParse   *m_psp;
  123. // #####  END  ACTIVEX SCRIPTING SUPPORT #####
  124.  
  125.   CLSID          m_clsidEngine;
  126.   static char   *s_pszError;
  127.  
  128.   // Sub-Object support
  129. #define csubobjMAX    30
  130.   int           m_csubobj;
  131.   LPOLESTR      m_rgpwszSubObjs[csubobjMAX];   // Should really dynamically allocate this array
  132.   IDispatch    *m_rgpdispSubObjs[csubobjMAX];  // Should really dynamically allocate this array
  133.   CSpriteClass *m_rgpsc[csubobjMAX];
  134.   GUID          m_libidSubObj;
  135.   CLSID         m_clsidSubObj;
  136.   IID           m_iidSubObj;
  137.  
  138.   // These reset every new game
  139.   BOOL m_fPaused:1;
  140.   BOOL m_fShipDead:1;
  141.   BOOL m_fShipRestart:1;
  142.   BOOL m_fGameOver:1;
  143.  
  144.   // DEBUG info
  145.   static HRESULT s_hr;
  146.   #define SIG_Game 'Game'
  147.   DECLARE_SIGNATURE(SIG_Game);
  148.   };
  149.  
  150.  
  151. //---------------------------------------------------------------------------
  152. // the CGameOA class; Ole automation implementation for static members
  153. // of the IGame interface.
  154. //---------------------------------------------------------------------------
  155. class CGameOA : public IGame, public COleAuto, public IProvideClassInfo,
  156.                 public IConnectionPointContainer
  157.   {
  158. public:
  159.   // *** Constructor / Destructor ***
  160.   CGameOA::CGameOA(CGame *);
  161.  
  162.   // *** IUnknown methods ***
  163.   STDMETHOD(QueryInterface)(REFIID iid, void** ppvObj) {return m_pgame->QueryInterface(iid, ppvObj);};
  164.   STDMETHOD_(ULONG, AddRef) (void)                     {return m_pgame->AddRef();};
  165.   STDMETHOD_(ULONG, Release)(void)                     {return m_pgame->Release();};
  166.   inline IDispatch *GetDispatch(void) {return (IGame *)this;};
  167.  
  168.   // *** IDispatch methods ***
  169.   DECLARE_STANDARD_DISPATCH();
  170.   // Override required by COleAuto:
  171.   virtual ITypeInfo **GetTinfoClsAddr(void) { return &g_ptinfoClsGameOA; };
  172.   virtual ITypeInfo **GetTinfoIntAddr(void) { return &g_ptinfoIntGameOA; };
  173.   virtual HRESULT GetTypeLibInfo(HINSTANCE *phinstOut, const GUID **pplibidOut, 
  174.                                  SHORT *pwMajLibOut, SHORT *pwMinLibOut,
  175.                                  const CLSID **ppclsidOut, const IID **ppiidOut,
  176.                                  ITypeLib ***ppptlOut);
  177.   virtual IDispatch *GetPrimary() {return this->GetDispatch(); };
  178.  
  179.   // *** IProvideClassInfo methods ***
  180.   STDMETHOD(GetClassInfo)(ITypeInfo** pptinfoOut);
  181.  
  182.   // *** IConnectionPointContainer methods ***
  183.   STDMETHOD(EnumConnectionPoints)(LPENUMCONNECTIONPOINTS* ppEnum);
  184.   STDMETHOD(FindConnectionPoint)(REFIID iid, LPCONNECTIONPOINT* ppCP);
  185.  
  186.   // *** IGame methods ***
  187.   STDMETHOD(get_Caption)(BSTR* lpbstrReturn);
  188.   STDMETHOD(put_Caption)(BSTR bstr);
  189.   STDMETHOD(get_Application)(ISpruuidsApp** lppaReturn);
  190.   STDMETHOD(get_Parent)(ISpruuidsApp** lppaReturn);
  191.   STDMETHOD(StartGame)(void);
  192.   STDMETHOD(EndGame)(void);
  193.   STDMETHOD(RemoveAllSprites)(void);
  194.   STDMETHOD(NextLevel)(void);
  195.   STDMETHOD(Refresh)(void);
  196.   STDMETHOD(AddScore)(int val);
  197.   STDMETHOD(StdBorderBounce)(ISprite* pspr, int brd);
  198.   STDMETHOD(StdBorderWrap)(  ISprite* pspr, int brd);
  199.   STDMETHOD(StdInitRand)(ISprite* pspr, VARIANT user);
  200.   STDMETHOD(StdInitEdge)(ISprite* pspr, VARIANT user);
  201.   STDMETHOD(get_Paused)(VARIANT_BOOL* pRet);
  202.   STDMETHOD(put_Paused)(VARIANT_BOOL val);
  203.   STDMETHOD(get_Width)(int* pRet);
  204.   STDMETHOD(put_Width)(int val);
  205.   STDMETHOD(get_Height)(int* pRet);
  206.   STDMETHOD(put_Height)(int val);
  207.   STDMETHOD(get_BackColor)(long* pRet);
  208.   STDMETHOD(put_BackColor)(long val);
  209.   STDMETHOD(get_Score)(int* pRet);
  210.   STDMETHOD(put_Score)(int val);
  211.   STDMETHOD(get_Level)(int* pRet);
  212.   STDMETHOD(put_Level)(int val);
  213.   STDMETHOD(get_ShipCount)(int* pRet);
  214.   STDMETHOD(put_ShipCount)(int val);
  215.   STDMETHOD(get_ScoreFirst1Up)(int* pRet);
  216.   STDMETHOD(put_ScoreFirst1Up)(int val);
  217.   STDMETHOD(get_ScoreSecond1Up)(int* pRet);
  218.   STDMETHOD(put_ScoreSecond1Up)(int val);
  219.   STDMETHOD(get_DScoreNext1Up)(int* pRet);
  220.   STDMETHOD(put_DScoreNext1Up)(int val);
  221.   STDMETHOD(get_ShipsStart)(int* pRet);
  222.   STDMETHOD(put_ShipsStart)(int val);
  223.   STDMETHOD(get_Tag)(VARIANT* pRet);
  224.   STDMETHOD(put_Tag)(VARIANT val);
  225.   STDMETHOD(get_StatusText)(BSTR* lpbstrReturn);
  226.   STDMETHOD(put_StatusText)(BSTR bstr);
  227.  
  228.   class XCP : public IConnectionPoint
  229.     {
  230.     inline CGameOA *PGAMEOA(void) { return ((CGameOA *)((char *)this - (char *)&(((CGameOA *)0)->m_cp))); }
  231.  
  232.   public:
  233.     XCP();
  234.     void Close(void);
  235.  
  236.     // *** IUnknown methods ***
  237.     STDMETHOD(QueryInterface)(REFIID iid, void** ppvObjOut);
  238.     STDMETHOD_(ULONG, AddRef)(void);
  239.     STDMETHOD_(ULONG, Release)(void);
  240.     inline IUnknown *GetUnknown(void) {return (IConnectionPoint *)this;};
  241.  
  242.     // *** IConnectionPoint methods ***
  243.     STDMETHOD(GetConnectionInterface)(IID* piid);
  244.     STDMETHOD(GetConnectionPointContainer)(IConnectionPointContainer** ppCPC);
  245.     STDMETHOD(Advise)(IUnknown* punkSink, DWORD* pdwCookie);
  246.     STDMETHOD(Unadvise)(DWORD dwCookie);
  247.     STDMETHOD(EnumConnections)(LPENUMCONNECTIONS* ppEnum);
  248.  
  249.     // *** Member Variables ***
  250.     ULONG     m_cref;
  251. #define GAME_cADVISE 5
  252.     IDispatch *m_rgpdisp[GAME_cADVISE];     // Array of pdisps to call.
  253.     } m_cp;
  254.  
  255.   // *** Event Methods ***
  256.   void FireNewGame(void);
  257.   void FireNewLevel(void);
  258.   void FireNewShip(void);
  259.   static void FireCollide(CSprite *psprMoved, CSprite *psprHit, int);
  260.   void FireTick(void);
  261.   void FireKeyDown(int vk);
  262.   void FireKeyPress(int ascii);
  263.   void FireKeyUp(int vk);
  264.   void FireMouseMove(int x, int y, long mk);
  265.   void FireMouseDown(int x, int y, long mk, long button);
  266.   void FireMouseUp(  int x, int y, long mk, long button);
  267.  
  268.   // *** Member Variable ***
  269.   CGame *m_pgame;
  270.   };
  271.  
  272. //--- EOF -------------------------------------------------------------------
  273.