请问MFC中如何使JS脚本导致的弹出的对话框不弹出来 我继承了CHtmlView ,同时使用了在派生中调用了IHTMLDocument2接口。我现在想使在页面脚本有错误的情况,不弹出对话框,这样的话,别人就不会影响客户的使用。当然更重要的事,客户认为弹框这是我造成的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 #include <exdispid.h>#include <mshtmcid.h> // CMDSETID_Forms3 definition#include <mshtmhst.h> // IDM_menu item definitions#include <mshtml.h>#pragma warning(disable:4100)class CMyHtmlControlSite : public COleControlSite { public: CMyHtmlControlSite(COleControlContainer *pCntr); ~CMyHtmlControlSite(void); CStartPageHtmlCtrl *m_pViw; CHtmlView* GetView() const;protected: BEGIN_INTERFACE_PART(DocHostUIHandler, IDocHostUIHandler) STDMETHOD(GetExternal)(LPDISPATCH*); STDMETHOD(GetHostInfo)(DOCHOSTUIINFO*); STDMETHOD(ShowContextMenu)(DWORD, LPPOINT, LPUNKNOWN, LPDISPATCH); STDMETHOD(ShowUI)(DWORD, LPOLEINPLACEACTIVEOBJECT,LPOLECOMMANDTARGET, LPOLEINPLACEFRAME, LPOLEINPLACEUIWINDOW); STDMETHOD(HideUI)(void); STDMETHOD(UpdateUI)(void); STDMETHOD(EnableModeless)(BOOL); STDMETHOD(OnDocWindowActivate)(BOOL); STDMETHOD(OnFrameWindowActivate)(BOOL); STDMETHOD(ResizeBorder)(LPCRECT, LPOLEINPLACEUIWINDOW, BOOL); STDMETHOD(TranslateAccelerator)(LPMSG, const GUID*, DWORD); STDMETHOD(GetOptionKeyPath)(OLECHAR **, DWORD); STDMETHOD(GetDropTarget)(LPDROPTARGET, LPDROPTARGET*); STDMETHOD(TranslateUrl)(DWORD, OLECHAR*, OLECHAR **); STDMETHOD(FilterDataObject)(LPDATAOBJECT , LPDATAOBJECT*); END_INTERFACE_PART(DocHostUIHandler) BEGIN_INTERFACE_PART(OleCommandTarget, IOleCommandTarget) STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText); STDMETHOD(Exec)(const GUID* pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG* pvaIn, VARIANTARG* pvaOut); END_INTERFACE_PART(OleCommandTarget) DECLARE_INTERFACE_MAP() }; BEGIN_INTERFACE_MAP(CMyHtmlControlSite, COleControlSite) INTERFACE_PART(CMyHtmlControlSite, IID_IDocHostUIHandler, DocHostUIHandler) INTERFACE_PART(CMyHtmlControlSite, IID_IOleCommandTarget, OleCommandTarget) END_INTERFACE_MAP() CMyHtmlControlSite::CMyHtmlControlSite(COleControlContainer* pContainer): COleControlSite(pContainer){} CMyHtmlControlSite::~CMyHtmlControlSite(void) { } HRESULT CMyHtmlControlSite::XOleCommandTarget::Exec (const GUID* pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG* pvaIn, VARIANTARG* pvaOut ) { HRESULT hr = OLECMDERR_E_NOTSUPPORTED; //return S_OK; if (pguidCmdGroup && IsEqualGUID(*pguidCmdGroup, CGID_DocHostCommandHandler)) { switch (nCmdID) { case OLECMDID_SHOWSCRIPTERROR: { IHTMLDocument2* pDoc = NULL; IHTMLWindow2* pWindow = NULL; IHTMLEventObj* pEventObj = NULL; BSTR rgwszNames[5] = { /* SysAllocString(L"errLine"), SysAllocString(L"errCharacter"), SysAllocString(L"errCode"), SysAllocString(L"errMsg"), SysAllocString(L"errUrl") */ SysAllocString(L"errorLine"), SysAllocString(L"errorCharacter"), SysAllocString(L"errorCode"), SysAllocString(L"errorMessage"), SysAllocString(L"errorUrl") }; DISPID rgDispIDs[5]; VARIANT rgvaEventInfo[5]; DISPPARAMS params; BOOL fContinueRunningScripts = false; //修改此处为false禁止脚本错误提示 params.cArgs = 0; params.cNamedArgs = 0; hr = pvaIn->punkVal->QueryInterface(IID_IHTMLDocument2, (void **) &pDoc); hr = pDoc->get_parentWindow(&pWindow); pDoc->Release(); hr = pWindow->get_event(&pEventObj); for (int i = 0; i < 5; i++) { hr = pEventObj->GetIDsOfNames(IID_NULL, &rgwszNames[i], 1, LOCALE_SYSTEM_DEFAULT, &rgDispIDs[i]); hr = pEventObj->Invoke( rgDispIDs[i], IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, ¶ms, &rgvaEventInfo[i], NULL, NULL ); //可以在此记录错误信息 //必须使用SysFreeString来释放SysAllocString分配的内存, //SysAllocString在分配的内存中记录了字符的长度 SysFreeString(rgwszNames[i]); } // At this point, you would normally alert the user with // the information about the error, which is now contained // in rgvaEventInfo[]. Or, you could just exit silently. (*pvaOut).vt = VT_BOOL; if (fContinueRunningScripts) { // 在页面中继续执行脚本 (*pvaOut).boolVal = VARIANT_TRUE; } else { // 停止在页面中执行脚本 (*pvaOut).boolVal = VARIANT_FALSE; } break; } default: hr =OLECMDERR_E_NOTSUPPORTED; break; } } else { hr = OLECMDERR_E_UNKNOWNGROUP; } return (hr); } ULONG FAR EXPORT CMyHtmlControlSite::XOleCommandTarget::AddRef() { METHOD_PROLOGUE(CMyHtmlControlSite, OleCommandTarget) return pThis->ExternalAddRef(); } ULONG FAR EXPORT CMyHtmlControlSite::XOleCommandTarget::Release() { METHOD_PROLOGUE(CMyHtmlControlSite, OleCommandTarget) return pThis->ExternalRelease(); } HRESULT FAR EXPORT CMyHtmlControlSite::XOleCommandTarget::QueryInterface(REFIID riid, void **ppvObj) { METHOD_PROLOGUE(CMyHtmlControlSite, OleCommandTarget) HRESULT hr = (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObj); return hr; } STDMETHODIMP CMyHtmlControlSite::XOleCommandTarget::QueryStatus( const GUID __RPC_FAR *pguidCmdGroup, ULONG cCmds, OLECMD __RPC_FAR prgCmds[ ], OLECMDTEXT __RPC_FAR *pCmdText ) { METHOD_PROLOGUE(CMyHtmlControlSite, OleCommandTarget) return OLECMDERR_E_NOTSUPPORTED; } STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::GetHostInfo( DOCHOSTUIINFO *pInfo){ METHOD_PROLOGUE_EX(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT; return pView->OnGetHostInfo(pInfo);}STDMETHODIMP_(ULONG) CMyHtmlControlSite::XDocHostUIHandler::AddRef(){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) return pThis->ExternalAddRef();}STDMETHODIMP_(ULONG) CMyHtmlControlSite::XDocHostUIHandler::Release(){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) return pThis->ExternalRelease();}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::QueryInterface( REFIID iid, LPVOID far* ppvObj) { METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) return pThis->ExternalQueryInterface(&iid, ppvObj);}CHtmlView* CMyHtmlControlSite::GetView() const{ return STATIC_DOWNCAST(CHtmlView, m_pCtrlCont->m_pWnd);}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::GetExternal(LPDISPATCH *lppDispatch){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnGetExternal(lppDispatch);}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::ShowContextMenu( DWORD dwID, LPPOINT ppt, LPUNKNOWN pcmdtReserved, LPDISPATCH pdispReserved){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnShowContextMenu(dwID, ppt, pcmdtReserved, pdispReserved);}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::ShowUI( DWORD dwID, LPOLEINPLACEACTIVEOBJECT pActiveObject, LPOLECOMMANDTARGET pCommandTarget, LPOLEINPLACEFRAME pFrame, LPOLEINPLACEUIWINDOW pDoc){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnShowUI(dwID, pActiveObject, pCommandTarget, pFrame, pDoc);}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::HideUI(void){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnHideUI();} STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::UpdateUI(void){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnUpdateUI();}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::EnableModeless(BOOL fEnable){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnEnableModeless(fEnable);}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::OnDocWindowActivate(BOOL fActivate){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnDocWindowActivate(fActivate);}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::OnFrameWindowActivate( BOOL fActivate){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnFrameWindowActivate(fActivate);}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::ResizeBorder( LPCRECT prcBorder, LPOLEINPLACEUIWINDOW pUIWindow, BOOL fFrameWindow){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnResizeBorder(prcBorder, pUIWindow, fFrameWindow);}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::TranslateAccelerator( LPMSG lpMsg, const GUID* pguidCmdGroup, DWORD nCmdID){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnTranslateAccelerator(lpMsg, pguidCmdGroup, nCmdID);}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::GetOptionKeyPath( LPOLESTR* pchKey, DWORD dwReserved){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnGetOptionKeyPath(pchKey, dwReserved);}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::GetDropTarget( LPDROPTARGET pDropTarget, LPDROPTARGET* ppDropTarget){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnGetDropTarget(pDropTarget, ppDropTarget);}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::TranslateUrl( DWORD dwTranslate, OLECHAR* pchURLIn, OLECHAR** ppchURLOut){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnTranslateUrl(dwTranslate, pchURLIn, ppchURLOut);}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::FilterDataObject( LPDATAOBJECT pDataObject, LPDATAOBJECT* ppDataObject){ METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView(); ASSERT_VALID(pView); if (pView == NULL) { return E_FAIL; } return pView->OnFilterDataObject(pDataObject, ppDataObject);}啊。来个人回复一下,我好结贴。在这里感谢一下给我信息和方向的博客作者http://www.cnblogs.com/thinkingfor/archive/2010/11/10/1873689.html如果你不是用的CHtmlview而是CDHtmlDialog 采用他在做法。累死了。又熬夜了。 VC6的死机问题 设置clipping region的诡异问题 [最后10分了]关于vs2005和代码的问题 ATField请进 怎样使用winsock i/o多路复用?????? 关于 "模板化的映射" 的问题,请各位高手指点 关于《Visual C++ 技术内幕》? 进程外组件prox/stub dll怎么生成? 如何开发长时间工作的服务器软件? 滚动条怎么模拟?我。。。。 cserialport 串口类的使用 将结构体的内容拷贝到一个一维数组中
#include <mshtmcid.h> // CMDSETID_Forms3 definition
#include <mshtmhst.h> // IDM_menu item definitions
#include <mshtml.h>
#pragma warning(disable:4100)
class CMyHtmlControlSite : public COleControlSite
{
public:
CMyHtmlControlSite(COleControlContainer *pCntr);
~CMyHtmlControlSite(void);
CStartPageHtmlCtrl *m_pViw;
CHtmlView* GetView() const;
protected: BEGIN_INTERFACE_PART(DocHostUIHandler, IDocHostUIHandler) STDMETHOD(GetExternal)(LPDISPATCH*);
STDMETHOD(GetHostInfo)(DOCHOSTUIINFO*); STDMETHOD(ShowContextMenu)(DWORD, LPPOINT, LPUNKNOWN, LPDISPATCH);
STDMETHOD(ShowUI)(DWORD, LPOLEINPLACEACTIVEOBJECT,LPOLECOMMANDTARGET, LPOLEINPLACEFRAME, LPOLEINPLACEUIWINDOW);
STDMETHOD(HideUI)(void);
STDMETHOD(UpdateUI)(void);
STDMETHOD(EnableModeless)(BOOL);
STDMETHOD(OnDocWindowActivate)(BOOL);
STDMETHOD(OnFrameWindowActivate)(BOOL);
STDMETHOD(ResizeBorder)(LPCRECT, LPOLEINPLACEUIWINDOW, BOOL);
STDMETHOD(TranslateAccelerator)(LPMSG, const GUID*, DWORD);
STDMETHOD(GetOptionKeyPath)(OLECHAR **, DWORD);
STDMETHOD(GetDropTarget)(LPDROPTARGET, LPDROPTARGET*); STDMETHOD(TranslateUrl)(DWORD, OLECHAR*, OLECHAR **);
STDMETHOD(FilterDataObject)(LPDATAOBJECT , LPDATAOBJECT*); END_INTERFACE_PART(DocHostUIHandler)
BEGIN_INTERFACE_PART(OleCommandTarget, IOleCommandTarget)
STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText);
STDMETHOD(Exec)(const GUID* pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG* pvaIn, VARIANTARG* pvaOut);
END_INTERFACE_PART(OleCommandTarget) DECLARE_INTERFACE_MAP() }; BEGIN_INTERFACE_MAP(CMyHtmlControlSite, COleControlSite)
INTERFACE_PART(CMyHtmlControlSite, IID_IDocHostUIHandler, DocHostUIHandler)
INTERFACE_PART(CMyHtmlControlSite, IID_IOleCommandTarget, OleCommandTarget)
END_INTERFACE_MAP()
CMyHtmlControlSite::CMyHtmlControlSite(COleControlContainer* pContainer): COleControlSite(pContainer)
{
}
CMyHtmlControlSite::~CMyHtmlControlSite(void)
{
}
HRESULT CMyHtmlControlSite::XOleCommandTarget::Exec
(const GUID* pguidCmdGroup, DWORD nCmdID,
DWORD nCmdexecopt, VARIANTARG* pvaIn, VARIANTARG* pvaOut )
{
HRESULT hr = OLECMDERR_E_NOTSUPPORTED;
//return S_OK;
if (pguidCmdGroup && IsEqualGUID(*pguidCmdGroup, CGID_DocHostCommandHandler))
{
switch (nCmdID)
{
case OLECMDID_SHOWSCRIPTERROR:
{
IHTMLDocument2* pDoc = NULL;
IHTMLWindow2* pWindow = NULL;
IHTMLEventObj* pEventObj = NULL;
BSTR rgwszNames[5] =
{
/* SysAllocString(L"errLine"),
SysAllocString(L"errCharacter"),
SysAllocString(L"errCode"),
SysAllocString(L"errMsg"),
SysAllocString(L"errUrl") */ SysAllocString(L"errorLine"),
SysAllocString(L"errorCharacter"),
SysAllocString(L"errorCode"),
SysAllocString(L"errorMessage"),
SysAllocString(L"errorUrl")
};
DISPID rgDispIDs[5];
VARIANT rgvaEventInfo[5];
DISPPARAMS params;
BOOL fContinueRunningScripts = false; //修改此处为false禁止脚本错误提示
params.cArgs = 0;
params.cNamedArgs = 0;
hr = pvaIn->punkVal->QueryInterface(IID_IHTMLDocument2, (void **) &pDoc);
hr = pDoc->get_parentWindow(&pWindow);
pDoc->Release();
hr = pWindow->get_event(&pEventObj);
for (int i = 0; i < 5; i++)
{
hr = pEventObj->GetIDsOfNames(IID_NULL, &rgwszNames[i], 1,
LOCALE_SYSTEM_DEFAULT, &rgDispIDs[i]);
hr = pEventObj->Invoke(
rgDispIDs[i],
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET,
¶ms,
&rgvaEventInfo[i],
NULL,
NULL
);
//可以在此记录错误信息
//必须使用SysFreeString来释放SysAllocString分配的内存,
//SysAllocString在分配的内存中记录了字符的长度
SysFreeString(rgwszNames[i]);
}
// At this point, you would normally alert the user with
// the information about the error, which is now contained
// in rgvaEventInfo[]. Or, you could just exit silently.
(*pvaOut).vt = VT_BOOL;
if (fContinueRunningScripts)
{
// 在页面中继续执行脚本
(*pvaOut).boolVal = VARIANT_TRUE;
}
else
{
// 停止在页面中执行脚本
(*pvaOut).boolVal = VARIANT_FALSE;
}
break;
}
default:
hr =OLECMDERR_E_NOTSUPPORTED;
break;
}
}
else
{
hr = OLECMDERR_E_UNKNOWNGROUP;
}
return (hr);
}
ULONG FAR EXPORT CMyHtmlControlSite::XOleCommandTarget::AddRef()
{
METHOD_PROLOGUE(CMyHtmlControlSite, OleCommandTarget)
return pThis->ExternalAddRef();
}
ULONG FAR EXPORT CMyHtmlControlSite::XOleCommandTarget::Release()
{
METHOD_PROLOGUE(CMyHtmlControlSite, OleCommandTarget)
return pThis->ExternalRelease();
}
HRESULT FAR EXPORT CMyHtmlControlSite::XOleCommandTarget::QueryInterface(REFIID riid, void **ppvObj)
{
METHOD_PROLOGUE(CMyHtmlControlSite, OleCommandTarget)
HRESULT hr = (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObj);
return hr;
}
STDMETHODIMP CMyHtmlControlSite::XOleCommandTarget::QueryStatus(
const GUID __RPC_FAR *pguidCmdGroup,
ULONG cCmds,
OLECMD __RPC_FAR prgCmds[ ],
OLECMDTEXT __RPC_FAR *pCmdText
)
{
METHOD_PROLOGUE(CMyHtmlControlSite, OleCommandTarget)
return OLECMDERR_E_NOTSUPPORTED;
} STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::GetHostInfo(
DOCHOSTUIINFO *pInfo)
{
METHOD_PROLOGUE_EX(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT;
return pView->OnGetHostInfo(pInfo);
}STDMETHODIMP_(ULONG) CMyHtmlControlSite::XDocHostUIHandler::AddRef()
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler)
return pThis->ExternalAddRef();
}STDMETHODIMP_(ULONG) CMyHtmlControlSite::XDocHostUIHandler::Release()
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler)
return pThis->ExternalRelease();
}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::QueryInterface(
REFIID iid, LPVOID far* ppvObj)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler)
return pThis->ExternalQueryInterface(&iid, ppvObj);
}
CHtmlView* CMyHtmlControlSite::GetView() const
{
return STATIC_DOWNCAST(CHtmlView, m_pCtrlCont->m_pWnd);
}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::GetExternal(LPDISPATCH *lppDispatch)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnGetExternal(lppDispatch);
}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::ShowContextMenu(
DWORD dwID, LPPOINT ppt, LPUNKNOWN pcmdtReserved, LPDISPATCH pdispReserved)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnShowContextMenu(dwID, ppt, pcmdtReserved, pdispReserved);
}
STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::ShowUI(
DWORD dwID, LPOLEINPLACEACTIVEOBJECT pActiveObject,
LPOLECOMMANDTARGET pCommandTarget, LPOLEINPLACEFRAME pFrame,
LPOLEINPLACEUIWINDOW pDoc)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnShowUI(dwID, pActiveObject, pCommandTarget, pFrame, pDoc);
}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::HideUI(void)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnHideUI();
}
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler) CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnUpdateUI();
}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::EnableModeless(BOOL fEnable)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler)
CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnEnableModeless(fEnable);
}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::OnDocWindowActivate(BOOL fActivate)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler)
CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnDocWindowActivate(fActivate);
}
STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::OnFrameWindowActivate(
BOOL fActivate)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler)
CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnFrameWindowActivate(fActivate);
}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::ResizeBorder(
LPCRECT prcBorder, LPOLEINPLACEUIWINDOW pUIWindow, BOOL fFrameWindow)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler)
CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnResizeBorder(prcBorder, pUIWindow, fFrameWindow);
}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::TranslateAccelerator(
LPMSG lpMsg, const GUID* pguidCmdGroup, DWORD nCmdID)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler)
CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnTranslateAccelerator(lpMsg, pguidCmdGroup, nCmdID);
}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::GetOptionKeyPath(
LPOLESTR* pchKey, DWORD dwReserved)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler)
CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnGetOptionKeyPath(pchKey, dwReserved);
}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::GetDropTarget(
LPDROPTARGET pDropTarget, LPDROPTARGET* ppDropTarget)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler)
CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnGetDropTarget(pDropTarget, ppDropTarget);
}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::TranslateUrl(
DWORD dwTranslate, OLECHAR* pchURLIn, OLECHAR** ppchURLOut)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler)
CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnTranslateUrl(dwTranslate, pchURLIn, ppchURLOut);
}STDMETHODIMP CMyHtmlControlSite::XDocHostUIHandler::FilterDataObject(
LPDATAOBJECT pDataObject, LPDATAOBJECT* ppDataObject)
{
METHOD_PROLOGUE_EX_(CMyHtmlControlSite, DocHostUIHandler)
CHtmlView* pView = pThis->GetView();
ASSERT_VALID(pView);
if (pView == NULL)
{
return E_FAIL;
}
return pView->OnFilterDataObject(pDataObject, ppDataObject);
}啊。来个人回复一下,我好结贴。
在这里感谢一下给我信息和方向的博客作者
http://www.cnblogs.com/thinkingfor/archive/2010/11/10/1873689.html如果你不是用的CHtmlview而是CDHtmlDialog 采用他在做法。
累死了。又熬夜了。