|
|
// Copyright (C) 1996 Microsoft Corporation. All rights reserved.
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef __CONTENT_AUTOMATION_H__
#define __CONTENT_AUTOMATION_H__
#include <stddef.h>
#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
|