#include "StdAfx.h"#include"Custsite.h"#include"test.h" //主要用到 theApp (261行)
BEGIN_INTERFACE_MAP(CCustomControlSite, COleControlSite)
INTERFACE_PART(CCustomControlSite, IID_IDocHostShowUI, DocHostShowUI)
INTERFACE_PART(CCustomControlSite, IID_IDocHostUIHandler, DocHostUIHandler)
END_INTERFACE_MAP()
ULONG CCustomControlSite::XDocHostShowUI::AddRef()
{
METHOD_PROLOGUE(CCustomControlSite, DocHostShowUI);return pThis->ExternalAddRef();
}
ULONG CCustomControlSite::XDocHostShowUI::Release()
{
METHOD_PROLOGUE(CCustomControlSite, DocHostShowUI);return pThis->ExternalRelease();
}
HRESULT CCustomControlSite::XDocHostShowUI::QueryInterface(REFIID riid,void **ppvObj)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostShowUI);return pThis->ExternalQueryInterface( &riid, ppvObj );
}
HRESULT CCustomControlSite::XDocHostShowUI::ShowHelp(HWND hwnd,
LPOLESTR pszHelpFile,
UINT nCommand,
DWORD dwData,
POINT ptMouse,
IDispatch*pDispatchObjectHit)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostShowUI);returnS_OK;
}
HRESULT CCustomControlSite::XDocHostShowUI::ShowMessage(HWND hwnd,
LPOLESTR lpstrText,
LPOLESTR lpstrCaption,
DWORD dwType,
LPOLESTR lpstrHelpFile,
DWORD dwHelpContext,
LRESULT*plResult)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostShowUI);
MessageBox(hwnd, (CString)lpstrText, _T("Cpp & JavaScript"), /*dwType*/MB_ICONWARNING);returnS_OK;
}
ULONG FAR EXPORT CCustomControlSite::XDocHostUIHandler::AddRef()
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)return pThis->ExternalAddRef();
}
ULONG FAR EXPORT CCustomControlSite::XDocHostUIHandler::Release()
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)return pThis->ExternalRelease();
}
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::QueryInterface(REFIID riid,void **ppvObj)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
HRESULT hr= (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObj);returnhr;
}//* CImpIDocHostUIHandler::GetHostInfo//*//* Purpose: Called at initialization//*
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::GetHostInfo( DOCHOSTUIINFO*pInfo )
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
pInfo->dwFlags =DOCHOSTUIFLAG_NO3DBORDER;
pInfo->dwDoubleClick =DOCHOSTUIDBLCLK_DEFAULT;returnS_OK;
}//* CImpIDocHostUIHandler::ShowUI//*//* Purpose: Called when MSHTML.DLL shows its UI//*
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::ShowUI(
DWORD dwID,
IOleInPlaceActiveObject* /*pActiveObject*/,
IOleCommandTarget*pCommandTarget,
IOleInPlaceFrame* /*pFrame*/,
IOleInPlaceUIWindow* /*pDoc*/)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)//We've already got our own UI in place so just return S_OK
returnS_OK;
}//* CImpIDocHostUIHandler::HideUI//*//* Purpose: Called when MSHTML.DLL hides its UI//*
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::HideUI(void)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)returnS_OK;
}//* CImpIDocHostUIHandler::UpdateUI//*//* Purpose: Called when MSHTML.DLL updates its UI//*
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::UpdateUI(void)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)//MFC is pretty good about updating it's UI in it's Idle loop so I don't do anything here
returnS_OK;
}//* CImpIDocHostUIHandler::EnableModeless//*//* Purpose: Called from MSHTML.DLL's IOleInPlaceActiveObject::EnableModeless//*
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::EnableModeless(BOOL /*fEnable*/)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)returnE_NOTIMPL;
}//* CImpIDocHostUIHandler::OnDocWindowActivate//*//* Purpose: Called from MSHTML.DLL's IOleInPlaceActiveObject::OnDocWindowActivate//*
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::OnDocWindowActivate(BOOL /*fActivate*/)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)returnE_NOTIMPL;
}//* CImpIDocHostUIHandler::OnFrameWindowActivate//*//* Purpose: Called from MSHTML.DLL's IOleInPlaceActiveObject::OnFrameWindowActivate//*
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::OnFrameWindowActivate(BOOL /*fActivate*/)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)returnE_NOTIMPL;
}//* CImpIDocHostUIHandler::ResizeBorder//*//* Purpose: Called from MSHTML.DLL's IOleInPlaceActiveObject::ResizeBorder//*
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::ResizeBorder(
LPCRECT/*prcBorder*/,
IOleInPlaceUIWindow* /*pUIWindow*/,
BOOL/*fRameWindow*/)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)returnE_NOTIMPL;
}//* CImpIDocHostUIHandler::ShowContextMenu//*//* Purpose: Called when MSHTML.DLL would normally display its context menu//*
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::ShowContextMenu(
DWORD/*dwID*/,
POINT*pptPosition,
IUnknown* /*pCommandTarget*/,
IDispatch* /*pDispatchObjectHit*/)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)returnE_NOTIMPL;//CMenu menu;//menu.LoadMenu(IDR_CUSTOM_POPUP);//CMenu* pSubMenu = menu.GetSubMenu(0);
Because we passed in theApp.m_pMainWnd all of ourWM_COMMAND handlers for the menu items must be handledin CCustomBrowserApp. If you want this to be your dialogyou will have to grab a pointer to your dialog class andpass the hWnd of it into the last parameter in this call
//pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, pptPosition->x, pptPosition->y, theApp.m_pMainWnd);
return S_OK; //We've shown our own context menu. MSHTML.DLL will no longer try to show its own.
}//* CImpIDocHostUIHandler::TranslateAccelerator//*//* Purpose: Called from MSHTML.DLL's TranslateAccelerator routines//*
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::TranslateAccelerator(LPMSG lpMsg,/*[in]*/ const GUID __RPC_FAR *pguidCmdGroup,/*[in]*/DWORD nCmdID)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)//disable F5
if(lpMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_F5) < 0)returnS_OK;if(GetKeyState(VK_CONTROL) & 0x8000)
{//disable ctrl + O
if(lpMsg->message == WM_KEYDOWN && GetAsyncKeyState(0x4F) < 0)returnS_OK;//disable ctrl + p
if(lpMsg->message == WM_KEYDOWN && GetAsyncKeyState(0x50) < 0)returnS_OK;//disable ctrl + N
if(lpMsg->message == WM_KEYDOWN && GetAsyncKeyState(0x4E) < 0)returnS_OK;
}//disable back space
if(lpMsg->wParam ==VK_BACK)returnS_OK;returnS_FALSE;
}//* CImpIDocHostUIHandler::GetOptionKeyPath//*//* Purpose: Called by MSHTML.DLL to find where the host wishes to store//* its options in the registry//*
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::GetOptionKeyPath(BSTR*pbstrKey, DWORD)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)returnE_NOTIMPL;
}
STDMETHODIMP CCustomControlSite::XDocHostUIHandler::GetDropTarget(/*[in]*/ IDropTarget __RPC_FAR *pDropTarget,/*[out]*/ IDropTarget __RPC_FAR *__RPC_FAR *ppDropTarget)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)returnE_NOTIMPL;
}
STDMETHODIMP CCustomControlSite::XDocHostUIHandler::GetExternal(/*[out]*/ IDispatch __RPC_FAR *__RPC_FAR *ppDispatch)
{//return the IDispatch we have for extending the object Model
IDispatch* pDisp = (IDispatch*)theApp.m_pDispOM; //这里
pDisp->AddRef();*ppDispatch =pDisp;returnS_OK;
}
STDMETHODIMP CCustomControlSite::XDocHostUIHandler::TranslateUrl(/*[in]*/DWORD dwTranslate,/*[in]*/ OLECHAR __RPC_FAR *pchURLIn,/*[out]*/ OLECHAR __RPC_FAR *__RPC_FAR *ppchURLOut)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)returnE_NOTIMPL;
}
STDMETHODIMP CCustomControlSite::XDocHostUIHandler::FilterDataObject(/*[in]*/ IDataObject __RPC_FAR *pDO,/*[out]*/ IDataObject __RPC_FAR *__RPC_FAR *ppDORet)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)returnE_NOTIMPL;
}