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

Windows编程

开发平台:

Visual C++

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