请问这样插入网页为什么不行
IStorage* lpStorage = NULL;//存储接口
IOleObject* lpOleObject = NULL;//OLE对象
LPLOCKBYTES lpLockBytes = NULL;//LOCKBYTE
IOleClientSite* lpOleClientSite = NULL;
CComPtr<IWebBrowser2> lpPolyCtl = NULL; //控件
CLSID clsid;
REOBJECT reobject;
HRESULT hr;
IRichEditOle *lpRichEditOle =m_RichEdit.GetIRichEditOle();
if(lpRichEditOle == NULL)
return ;
//创建PolyCtl对象并获取接口
hr = ::CoCreateInstance(CLSID_WebBrowser,NULL,CLSCTX_INPROC,IID_IWebBrowser2,(LPVOID*)&lpPolyCtl);
//hr = ::CoCreateInstance(CLSID_InternetExplorer,NULL,CLSCTX_LOCAL_SERVER,IID_IWebBrowser2,(LPVOID*)&lpPolyCtl);
if( lpPolyCtl == NULL )
{
return ;
}
// USES_CONVERSION;
BOOL bRet = TRUE;
try{
hr = lpPolyCtl->QueryInterface(IID_IOleObject,(void **)&lpOleObject);//获得数据对象接口
if( hr != S_OK )
AfxThrowOleException(hr);
hr = lpOleObject->GetUserClassID(&clsid);
if ( hr != S_OK)
AfxThrowOleException(hr);
hr = ::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);//创建LOCKBYTE对象
if (hr != S_OK)
AfxThrowOleException(hr);
ASSERT(lpLockBytes != NULL);
hr = ::StgCreateDocfileOnILockBytes(lpLockBytes,//创建复合文档
STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &lpStorage);
if (hr != S_OK)
{
VERIFY(lpLockBytes->Release() == 0);
lpLockBytes = NULL;
AfxThrowOleException(hr);
}
lpRichEditOle->GetClientSite(&lpOleClientSite);
ZeroMemory(&reobject, sizeof(REOBJECT));//初始化一个对象
reobject.cbStruct = sizeof(REOBJECT);
reobject.clsid = clsid;
reobject.cp = REO_CP_SELECTION;
reobject.dvaspect = DVASPECT_CONTENT;
reobject.dwFlags = REO_BELOWBASELINE;
reobject.poleobj = lpOleObject;
reobject.polesite = lpOleClientSite;
reobject.pstg = lpStorage;
lpOleObject->SetClientSite(lpOleClientSite);//
hr = lpRichEditOle->InsertObject( &reobject );
if (hr != S_OK)
AfxThrowOleException(hr);
OleSetContainedObject(lpOleObject,TRUE);
hr = lpPolyCtl->Navigate(L"www.baidu.com",NULL,NULL,NULL,NULL);
if (hr != S_OK)
AfxThrowOleException(hr);
::SendMessage(m_RichEdit.GetSafeHwnd(), EM_SCROLLCARET, (WPARAM)0, (LPARAM)0);
lpOleObject->DoVerb(OLEIVERB_UIACTIVATE, NULL, lpOleClientSite, 0,
m_RichEdit.m_hWnd, NULL);
lpOleObject->DoVerb(OLEIVERB_SHOW, NULL, lpOleClientSite, 0, m_RichEdit.m_hWnd,
NULL);
m_RichEdit.RedrawWindow();
}
catch( COleException* e )
{
TRACE(_T("OleException code:%d"),e->m_sc);
e->Delete();
bRet = FALSE;
}
// release the interface
//if( lpPolyCtl != NULL ) lpPolyCtl->Release();
if( lpOleObject != NULL ) lpOleObject->Release();
if( lpOleClientSite != NULL ) lpOleClientSite->Release();
if( lpStorage != NULL ) lpStorage->Release();
return ;
没有。我看的是网上找的扫描版。@WarWithinMe
re: 自己动手编写c++事件模型 rich 2006-08-04 15:10
下载了你的源码,在gcc下编译不过。
sub.w_event += CEventHandler(&obs, &CObserverTest::OnStartEvent));
CObserverTest的OnStartEvent函数不是静态的,怎么可以这样::使用?
VC编译器和GCC的C++支持不同?