3,245
社区成员
发帖
与我相关
我的任务
分享
#include <EXDISP.H>
class OleTest : public IOleClientSite
{
private:
int refNum;
IStorage *storage;
IOleObject *oleObject;
public:
OleTest() :refNum(NULL), storage(NULL), oleObject(NULL)
{
::OleInitialize(NULL);
::StgCreateDocfile(NULL, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_DIRECT | STGM_CREATE, 0, &(this->storage));
::OleCreate(CLSID_WebBrowser, IID_IOleObject, OLERENDER_DRAW, NULL, this, this->storage, (void**)(&this->oleObject));
if (this->oleObject)
{
this->oleObject->Release();
this->oleObject = NULL;
}
if (this->storage)
{
this->storage->Release();
this->storage = NULL;
}
::OleUninitialize();
}
~OleTest()
{
}
virtual HRESULT STDMETHODCALLTYPE QueryInterface(
/* [in] */ REFIID riid,
/* [iid_is][out] */ __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject)
{
*ppvObject = NULL;
if (riid == IID_IUnknown)
{
*ppvObject = this;
}
else if (riid == IID_IOleClientSite)
{
*ppvObject = (IOleClientSite *)this;
}
if (*ppvObject)
{
this->AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
virtual ULONG STDMETHODCALLTYPE AddRef(void)
{
this->refNum++;
return this->refNum;
}
virtual ULONG STDMETHODCALLTYPE Release(void)
{
this->refNum--;
return this->refNum;
}
//***********************IOleClientSite接口*******************
virtual HRESULT STDMETHODCALLTYPE SaveObject(void)
{
return S_OK;
}
virtual HRESULT STDMETHODCALLTYPE GetMoniker(
/* [in] */ DWORD dwAssign,
/* [in] */ DWORD dwWhichMoniker,
/* [out] */ __RPC__deref_out_opt IMoniker **ppmk)
{
*ppmk = NULL;
return E_NOTIMPL;
}
virtual HRESULT STDMETHODCALLTYPE GetContainer(
/* [out] */ __RPC__deref_out_opt IOleContainer **ppContainer)
{
*ppContainer = NULL;
return E_FAIL;
}
virtual HRESULT STDMETHODCALLTYPE ShowObject(void)
{
return S_OK;
}
virtual HRESULT STDMETHODCALLTYPE OnShowWindow(
/* [in] */ BOOL fShow)
{
return S_OK;
}
virtual HRESULT STDMETHODCALLTYPE RequestNewObjectLayout(void)
{
return S_OK;
}
};