佚名通过本文主要向大家介绍了chtmlview,mfc chtmlview,chtmlview类,连接到icloud时出错,连接icloud时出错等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: CHTMLView 设置了IDocUIHandler 又重新Navigate2时出错。
描述:
那个CDocHostUIHandler 的代码是
实现的一个IDocHostUIHandler接口的类
描述:
我使用MFC的文档视图模型,设置了SetUIHandler了,此时使用external什么的都正常。
但是,当点击了连接后,就出现内存不能读的情况。
什么原因呢?
在NavigateComplete2()
IDispatch* pDoc = GetHtmlDocument();
if (pDoc == NULL) {
return;
}
ICustomDoc* pDoc2=NULL;
HRESULT hresult = pDoc->QueryInterface(IID_ICustomDoc, (void**)&pDoc2);
if (FAILED(hresult)) {
pDoc->Release();
return;
}
pDoc->Release();
m_DocHostUIHandler=new CDocHostUIHandler();//this->GetDocument()
if(!this->GetDocument()->m_isConfig)
pDoc2->SetUIHandler(m_DocHostUIHandler);
pDoc2->Release();
那个CDocHostUIHandler 的代码是
实现的一个IDocHostUIHandler接口的类
////DocHostUIHandler.h
// DocHostUIHandler.h: interface for the CDocHostUIHandler class.
//Look into microsoft document for IDocHostUIHandler function
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DOCHOSTUIHANDLER_H__04A74BFE_93DE_4460_B0B9_E64E17BAD651__INCLUDED_)
#define AFX_DOCHOSTUIHANDLER_H__04A74BFE_93DE_4460_B0B9_E64E17BAD651__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "stdafx.h "
#include "mshtmhst.h"
//#include "YWClientDoc.h"
class CDocHostUIHandler : public IDocHostUIHandler
{
public:
// DWORD m_dwPointer;
// void SetPointer(DWORD dwPointer);
CDocHostUIHandler();
// CDocHostUIHandler(CYWClientDoc * myExternal);
virtual ~CDocHostUIHandler();
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid,
void **ppvObject );
///////////the fucntions from IUnknown
/*
virtual HRESULT STDMETHODCALLTYPE QueryInterface(
REFIID riid,
void **ppvObject )
{
if ( riid == IID_IDocHostUIHandler)
{
*ppvObject = ( IDocHostUIHandler * )this;
}
if(*ppvObject)
{
IUnknown *pUnknown;
pUnknown = (IUnknown *)(*ppvObject);
pUnknown-> AddRef();
}
return S_OK;
}
*/
virtual ULONG STDMETHODCALLTYPE AddRef()
{
return( InterlockedIncrement( &m_cRef ) );
}
virtual ULONG STDMETHODCALLTYPE Release()
{
ULONG uRet = InterlockedDecrement( &m_cRef );
if(0==uRet)
{
delete this;
}
return(uRet);
}
////////the virtual function from IDocHostUIHandler ////////////////
virtual HRESULT STDMETHODCALLTYPE ShowContextMenu(
/* [in] */ DWORD dwID,
/* [in] */ POINT __RPC_FAR *ppt,
/* [in] */ IUnknown __RPC_FAR *pcmdtReserved,
/* [in] */ IDispatch __RPC_FAR *pdispReserved)
{
return E_NOTIMPL; // S_OK; 屏蔽右键
}
virtual HRESULT STDMETHODCALLTYPE GetHostInfo(
/* [out][in] */ DOCHOSTUIINFO __RPC_FAR *pInfo)
{
if(pInfo != NULL)
{
pInfo->dwFlags |= DOCHOSTUIFLAG_NO3DBORDER;
}
else
{
DOCHOSTUIINFO my;
my.dwFlags=DOCHOSTUIFLAG_NO3DBORDER;
pInfo = & my;
}
return S_OK;
return E_NOTIMPL;
}
virtual HRESULT STDMETHODCALLTYPE ShowUI(
/* [in] */ DWORD dwID,
/* [in] */ IOleInPlaceActiveObject __RPC_FAR *pActiveObject,
/* [in] */ IOleCommandTarget __RPC_FAR *pCommandTarget,
/* [in] */ IOleInPlaceFrame __RPC_FAR *pFrame,
/* [in] &