// Copyright (C) 1996 Microsoft Corporation. All rights reserved. #if _MSC_VER > 1000 #pragma once #endif #ifndef __CONTENT_AUTOMATION_H__ #define __CONTENT_AUTOMATION_H__ #include #include "unknown.h" #include "contain.h" //=--------------------------------------------------------------------------= // AUTOMATIONOBJECTINFO //=--------------------------------------------------------------------------= // for each automation object type you wish to expose to the programmer/user // that is not a control, you must fill out one of these structures. if the // object isn't CoCreatable, then the first four fields should be empty. // otherwise, they should be filled in with the appropriate information. // use the macro DEFINE_AUTOMATIONOBJECT to both declare and define your object. // make sure you have an entry in the global table of objects, g_ObjectInfo // in the main .Cpp file for your InProc server. // typedef struct { UNKNOWNOBJECTINFO unknowninfo; // fill in with 0's if we're not CoCreatable long lVersion; // Version number of Object. ONLY USE IF YOU'RE CoCreatable! const IID *riid; // object's type LPCSTR pszHelpFile; // the helpfile for this automation object. ITypeInfo *pTypeInfo; // typeinfo for this object UINT cTypeInfo; // number of refs to the type info } AUTOMATIONOBJECTINFO; #define PPTYPEINFOOFOBJECT(index) &((((AUTOMATIONOBJECTINFO *)(g_ObjectInfo[(index)]).pInfo)->pTypeInfo)) #define CTYPEINFOOFOBJECT(index) ((AUTOMATIONOBJECTINFO *)(g_ObjectInfo[(index)]).pInfo)->cTypeInfo #define INTERFACEOFOBJECT(index) *(((AUTOMATIONOBJECTINFO *)(g_ObjectInfo[(index)]).pInfo)->riid) #define VERSIONOFOBJECT(index) ((AUTOMATIONOBJECTINFO *)(g_ObjectInfo[(index)]).pInfo)->lVersion #define DO_GUIDS_MATCH(riid1, riid2) ((riid1.Data1 == riid2.Data1) && (riid1 == riid2)) //=--------------------------------------------------------------------------= // these things are used to set up our objects in our global object table // #define OI_UNKNOWN 0 #define OI_AUTOMATION 1 #define OI_CONTROL 2 #define OI_PROPERTYPAGE 3 #define OI_BOGUS 0xffff #define EMPTYOBJECT { OI_BOGUS, NULL } class CAutomateContent : public CUnknownObject, public IDispatch { private: int m_cRef; class CContainer * m_pOuter; IDispatch * m_pIDispatch; BOOL m_bFirstTime; public: CAutomateContent(CContainer *); virtual ~CAutomateContent(); //Gotta have an IUnknown for delegation. STDMETHODIMP QueryInterface(REFIID, LPVOID *); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // pass through IDispatch functions to the internal interface STDMETHOD(GetTypeInfoCount)(UINT*); STDMETHOD(GetTypeInfo)(UINT, LCID, LPTYPEINFO*); STDMETHOD(GetIDsOfNames)(REFIID, LPOLESTR*, UINT, LCID, DISPID*); STDMETHOD(Invoke)(DISPID, REFIID, LCID, WORD, DISPPARAMS*, LPVARIANT, LPEXCEPINFO, UINT*); void LookupKeyword(LPCSTR cs); void OnCommandStateChange(long Command, BOOL Enable); void OnDownloadBegin(); void OnDownloadComplete(); void OnDocumentComplete(); void OnPropertyChange(LPCTSTR szProperty); void OnQuit(BOOL* Cancel); void OnStatusTextChange(LPCTSTR bstrText); void OnWindowActivated(); void OnTitleChange(LPCTSTR bstrTitle); // void OnProgressChange(long Progress, long ProgressMax); void OnBeforeNavigate(LPCTSTR URL, long Flags, LPCTSTR TargetFrameName, VARIANT* PostData, LPCTSTR Headers, BOOL* Cancel); void OnNavigateComplete(LPCTSTR URL); int m_ObjectType; BOOL m_fLoadedTypeInfo; }; #endif