APP.H

//--------------------------------------------------------------------------- 
// App.h
//---------------------------------------------------------------------------
// Sample spr program
//---------------------------------------------------------------------------
// (C) Copyright 1992-1997 by Microsoft Corporation. All rights reserved.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
// Globals
//---------------------------------------------------------------------------
extern class CApp *g_papp;
extern char *g_pszCodeFile;
extern char *g_pszRecFile;
extern int g_mode;

#define MODE_NORMAL 0
#define MODE_PLAYBACK 1
#define MODE_RECORD 2


//---------------------------------------------------------------------------
// Events on client of App
//---------------------------------------------------------------------------
BOOL AppEvt_Pause(int pause);
BOOL AppEvt_FQueryTerminate(BOOL fPromptUser);
void AppEvt_NewGame();
BOOL AppEvt_DlgProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
LRESULT AppEvt_PSWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);


//---------------------------------------------------------------------------
// App class
//---------------------------------------------------------------------------
class CApp : public ISpruuidsApp, public IOleComponent, public COleAuto
{
public:
// *** Constructor / Descructor ***
static HRESULT CreateApp(HINSTANCE hinst);
CApp(HINSTANCE hinst);
~CApp();

// *** IUnknown methods ***
STDMETHOD(QueryInterface)(REFIID riid, void** ppvObj);
STDMETHOD_(ULONG, AddRef)(void);
STDMETHOD_(ULONG, Release)(void);
inline IUnknown *GetUnknown(void) {return (ISpruuidsApp *)this;};
inline IDispatch *GetDispatch(void) {return (ISpruuidsApp *)this;};

// *** IDispatch methods ***
DECLARE_STANDARD_DISPATCH();
// Overrides required by COleAuto:
virtual ITypeInfo **GetTinfoClsAddr(void) { return &m_ptinfoCls; };
virtual ITypeInfo **GetTinfoIntAddr(void) { return &m_ptinfoInt; };
virtual HRESULT GetTypeLibInfo(HINSTANCE *phinstOut, const GUID **pplibidOut,
SHORT *pwMajLibOut, SHORT *pwMinLibOut,
const CLSID **ppclsidOut, const IID **ppiidOut,
ITypeLib ***ppptlOut);
virtual IDispatch *GetPrimary() {return this->GetDispatch(); };

// *** SpruuidsApp methods ****
STDMETHOD(get_Application)(ISpruuidsApp** lppaReturn);
STDMETHOD(get_Parent)(ISpruuidsApp** lppaReturn);
STDMETHOD(Quit)(void);
STDMETHOD(get_Game)(IGame** lppaReturn);

// *** IComponent methods ***
STDMETHOD_(BOOL, FPreTranslateMessage)(MSG* pMsg);
STDMETHOD_(void, OnEnterState)(ULONG uStateID, BOOL fEnter);
STDMETHOD_(void, OnAppActivate)(BOOL fActive, DWORD dwOtherThreadID);
STDMETHOD_(void, OnLoseActivation)(void);
STDMETHOD_(BOOL, FDoIdle)(DWORD grfidlef);
STDMETHOD_(BOOL, FContinueMessageLoop)(ULONG uReason, void* pvLoopData);
STDMETHOD_(BOOL, FQueryTerminate)(BOOL fPromptUser);
STDMETHOD_(void, Terminate)(void);

// *** Public methods ***
HRESULT MainMsgLoop(void);
HRESULT LoadGame(void);
void CloseGame(void);
void CausePause(int p);
HRESULT CheckTypeInfo(UINT itinfo);
HRESULT Playback(void);

// *** Public member variables ***
class CMsgLoop *m_pmsgloop;
class CGame *m_pgame;
HWND m_hwndDlg;
HWND m_hwndPS;
HWND m_hwndStat;
HWND m_hwndAbout;
HINSTANCE m_hinst;
DWORD m_idcomp;
BOOL m_fRegisteredComp;
ULONG m_cmodal;
BOOL m_fQuit;
ULONG m_cref;
ITypeInfo *m_ptinfoCls; // This OLE Automation object's coclass TypeInfo
ITypeInfo *m_ptinfoInt; // This OLE Automation object's interface TypeInfo

// DEBUG info
static HRESULT s_hr;
#define SIG_App 'App '
DECLARE_SIGNATURE(SIG_App);
};

//--- EOF -------------------------------------------------------------------