VC下的OLE项目注意了,这段代码很重要
从COleClientItem类派生的项目类中添加这段宏
//内嵌套类
IOleDocumentView* m_pWordView;
BEGIN_INTERFACE_PART(OleDocumentSite,IOleDocumentSite)
INIT_INTERFACE_PART(CCyzStkSysCntrItem,OleDocumentSite)
STDMETHOD(ActivateMe)(LPOLEDOCUMENTVIEW);
END_INTERFACE_PART(OleDocumentSite)
在实现文件件中添加
BEGIN_INTERFACE_MAP(CCyzStkSysCntrItem,COleClientItem)
INTERFACE_PART(CCyzStkSysCntrItem,IID_IOleDocumentSite,OleDocumentSite)
END_INTERFACE_MAP()
STDMETHODIMP_(ULONG) CCyzStkSysCntrItem::XOleDocumentSite::AddRef()
{
METHOD_PROLOGUE_EX(CCyzStkSysCntrItem,OleDocumentSite)
return pThis->ExternalAddRef();
}
STDMETHODIMP_(ULONG) CCyzStkSysCntrItem::XOleDocumentSite::Release()
{
METHOD_PROLOGUE_EX (CCyzStkSysCntrItem,OleDocumentSite)
return pThis->ExternalRelease();
}
STDMETHODIMP CCyzStkSysCntrItem::XOleDocumentSite::QueryInterface(REFIID iid,void** ppvObj)
{
METHOD_PROLOGUE_EX (CCyzStkSysCntrItem,OleDocumentSite)
return pThis->ExternalQueryInterface(&iid,ppvObj);
}
STDMETHODIMP CCyzStkSysCntrItem::XOleDocumentSite::ActivateMe(LPOLEDOCUMENTVIEW pDocView)
{
// IOleDocument* pDoc=NULL;
IOleInPlaceSite* pIOleInPlaceSite;
METHOD_PROLOGUE_EX(CCyzStkSysCntrItem,OleDocumentSite);
pThis->InternalQueryInterface(&IID_IOleInPlaceSite,(void**)&pIOleInPlaceSite);
if(pDocView==NULL)
{
if(FAILED(pThis->m_lpObject->QueryInterface(IID_IOleDocument,(void**)&(pThis->m_pDoc))))
return E_FAIL;
if(FAILED(pThis->m_pDoc->CreateView(pIOleInPlaceSite,NULL,0,&pDocView)))
return E_OUTOFMEMORY;
pThis->m_pDoc->Release();
}
else
{
pDocView->AddRef();
}
pThis->m_pWordView=pDocView;
pDocView->UIActivate(TRUE);
RECT rect={0,1024,0,768};
pDocView->GetRect(&rect);
pThis->GetActiveView()->GetClientRect(&rect);
pDocView->SetRect(&rect);
pDocView->Show(TRUE);
pThis->GetDocument()->UpdateAllViews(NULL);
return NOERROR;
}
你会发现你插入的OLE项目的服务程序将自动激活