📄 ctrlweb.cpp
字号:
if ( SysStringLen( V_BSTR(pvTargetFrameName) ) == 0 )
{
CString strURL( V_BSTR(pvURL) );
if ( _tcsncmp( strURL, _T("http"), 4 ) == 0 )
{
*pvCancel = VARIANT_TRUE;
m_tFrame = GetTickCount();
COleVariant vFrame( _T("_blank"), VT_BSTR );
m_pBrowser->Navigate2( pvURL, pvFlags, &vFrame, pvPostData, pvHeaders );
}
}
}
void CWebCtrl::OnNewWindow2(LPDISPATCH* ppDisp, VARIANT_BOOL* pbCancel)
{
*pbCancel = VARIANT_FALSE;
if ( m_bSandbox )
{
if ( GetTickCount() - m_tFrame > 1500 ) *pbCancel = VARIANT_TRUE;
}
}
/////////////////////////////////////////////////////////////////////////////
// CWebCtrl::DocSite control site implementation
BOOL CWebCtrl::CreateControlSite(COleControlContainer* pContainer, COleControlSite** ppSite, UINT nID, REFCLSID clsid)
{
ASSERT( ppSite != NULL );
*ppSite = new DocSite( this, pContainer );
return TRUE;
}
CWebCtrl::DocSite::DocSite(CWebCtrl* pCtrl, COleControlContainer* pContainer) : COleControlSite( pContainer )
{
m_pCtrl = pCtrl;
}
/////////////////////////////////////////////////////////////////////////////
// CWebCtrl::DocSite IDocHostUIHandler
IMPLEMENT_UNKNOWN(CWebCtrl::DocSite, DocHostUIHandler);
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::GetExternal(LPDISPATCH *lppDispatch)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
*lppDispatch = pCtrl->m_pExternal;
if ( *lppDispatch != NULL ) (*lppDispatch)->AddRef();
return ( *lppDispatch != NULL ) ? S_OK : S_FALSE;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::ShowContextMenu(DWORD dwID, LPPOINT ppt, LPUNKNOWN pcmdtReserved, LPDISPATCH pdispReserved)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
WVNCONTEXTMENU pNotify;
pNotify.hdr.hwndFrom = pCtrl->GetSafeHwnd();
pNotify.hdr.idFrom = pCtrl->GetDlgCtrlID();
pNotify.hdr.code = WVN_CONTEXTMENU;
pNotify.dwMenuID = dwID;
pNotify.ptMouse = *ppt;
pNotify.pCmdTarget = pcmdtReserved;
pNotify.pContext = pdispReserved;
LRESULT lResult = pCtrl->GetOwner()->SendMessage(
WM_NOTIFY, (WPARAM)pNotify.hdr.idFrom, (LPARAM)&pNotify );
if ( lResult == 1 ) return S_OK;
pCtrl->EnterMenu( ppt );
return S_FALSE;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::GetHostInfo(DOCHOSTUIINFO *pInfo)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_OK;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::ShowUI(DWORD dwID, LPOLEINPLACEACTIVEOBJECT pActiveObject, LPOLECOMMANDTARGET pCommandTarget, LPOLEINPLACEFRAME pFrame, LPOLEINPLACEUIWINDOW pDoc)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_FALSE;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::HideUI()
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_OK;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::UpdateUI(void)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_OK;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::EnableModeless(BOOL fEnable)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_OK;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::OnDocWindowActivate(BOOL fActivate)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_OK;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::OnFrameWindowActivate(BOOL fActivate)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_OK;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::ResizeBorder(LPCRECT prcBorder, LPOLEINPLACEUIWINDOW pUIWindow, BOOL fFrameWindow)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_OK;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::TranslateAccelerator(LPMSG lpMsg, const GUID* pguidCmdGroup, DWORD nCmdID)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_FALSE;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::GetOptionKeyPath(LPOLESTR* pchKey, DWORD dwReserved)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_FALSE;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::GetDropTarget(LPDROPTARGET pDropTarget, LPDROPTARGET* ppDropTarget)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_FALSE;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::TranslateUrl(DWORD dwTranslate, OLECHAR* pchURLIn, OLECHAR** ppchURLOut)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_FALSE;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostUIHandler::FilterDataObject(LPDATAOBJECT pDataObject, LPDATAOBJECT* ppDataObject)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostUIHandler)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// CWebCtrl::DocSite IDocHostShowUI
IMPLEMENT_UNKNOWN(CWebCtrl::DocSite, DocHostShowUI);
STDMETHODIMP CWebCtrl::DocSite::XDocHostShowUI::ShowHelp(HWND hwnd, LPOLESTR pszHelpFile, UINT uCommand, DWORD dwData, POINT ptMouse, IDispatch *pDispatchObjectHit)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostShowUI)
CWebCtrl* pCtrl = pThis->GetCtrl();
return S_FALSE;
}
STDMETHODIMP CWebCtrl::DocSite::XDocHostShowUI::ShowMessage(HWND hwnd, LPOLESTR lpstrText, LPOLESTR lpstrCaption, DWORD dwType, LPOLESTR lpstrHelpFile, DWORD dwHelpContext, LRESULT *plResult)
{
METHOD_PROLOGUE_EX_(CWebCtrl::DocSite, DocHostShowUI)
CWebCtrl* pCtrl = pThis->GetCtrl();
return pCtrl->m_bSandbox ? S_OK : S_FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// CWebCtrl::DocSite IServiceProvider
IMPLEMENT_UNKNOWN(CWebCtrl::DocSite, ServiceProvider);
STDMETHODIMP CWebCtrl::DocSite::XServiceProvider::QueryService(REFGUID guidService, REFIID riid, void **ppv)
{
METHOD_PROLOGUE(CWebCtrl::DocSite, ServiceProvider)
CWebCtrl* pCtrl = pThis->GetCtrl();
if ( guidService == SID_SInternetSecurityManager && pCtrl->m_bSandbox )
{
if ( riid == IID_IInternetSecurityManager )
{
return pThis->ExternalQueryInterface( &riid, ppv );
}
else
{
return E_NOINTERFACE;
}
}
else
{
// return SVC_E_UNKNOWNSERVICE;
return E_UNEXPECTED;
}
}
/////////////////////////////////////////////////////////////////////////////
// CWebCtrl::DocSite IInternetSecurityManager
IMPLEMENT_UNKNOWN(CWebCtrl::DocSite, InternetSecurityManager);
STDMETHODIMP CWebCtrl::DocSite::XInternetSecurityManager::GetSecurityId(LPCWSTR pwszUrl, BYTE *pbSecurityId, DWORD *pcbSecurityId, DWORD_PTR dwReserved)
{
return INET_E_DEFAULT_ACTION;
}
STDMETHODIMP CWebCtrl::DocSite::XInternetSecurityManager::GetSecuritySite(IInternetSecurityMgrSite **ppSite)
{
return INET_E_DEFAULT_ACTION;
}
STDMETHODIMP CWebCtrl::DocSite::XInternetSecurityManager::GetZoneMappings(DWORD dwZone, IEnumString **ppenumString, DWORD dwFlags)
{
return INET_E_DEFAULT_ACTION;
}
STDMETHODIMP CWebCtrl::DocSite::XInternetSecurityManager::MapUrlToZone(LPCWSTR pwszUrl, DWORD *pdwZone, DWORD dwFlags)
{
return INET_E_DEFAULT_ACTION;
}
STDMETHODIMP CWebCtrl::DocSite::XInternetSecurityManager::ProcessUrlAction(LPCWSTR pwszUrl, DWORD dwAction, BYTE *pPolicy, DWORD cbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwFlags, DWORD dwReserved)
{
if ( cbPolicy != 4 ) return INET_E_DEFAULT_ACTION;
PBOOL pBool = (PBOOL)pPolicy;
if ( wcsncmp( pwszUrl, L"p2p-col://", 10 ) == 0 )
{
if ( ( dwAction >= URLACTION_ACTIVEX_MIN && dwAction <= URLACTION_ACTIVEX_MAX )
|| ( dwAction >= URLACTION_SHELL_MIN && dwAction <= URLACTION_SHELL_MAX )
|| ( dwAction >= URLACTION_INFODELIVERY_MIN && dwAction <= URLACTION_INFODELIVERY_MAX )
|| ( dwAction >= URLACTION_HTML_MIN && dwAction <= URLACTION_HTML_MAX )
|| ( dwAction >= URLACTION_DOWNLOAD_MIN && dwAction <= URLACTION_DOWNLOAD_MAX ) )
{
*pBool = URLPOLICY_DISALLOW;
return S_OK;
}
else if ( dwAction >= URLACTION_SCRIPT_MIN && dwAction <= URLACTION_SCRIPT_MAX )
{
*pBool = ( dwAction == URLACTION_SCRIPT_RUN ) ? URLPOLICY_ALLOW : URLPOLICY_DISALLOW;
return S_OK;
}
}
else
{
*pBool = URLPOLICY_DISALLOW;
return S_OK;
}
return INET_E_DEFAULT_ACTION;
}
STDMETHODIMP CWebCtrl::DocSite::XInternetSecurityManager::QueryCustomPolicy(LPCWSTR pwszUrl, REFGUID guidKey, BYTE **ppPolicy, DWORD *pcbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwReserved)
{
return INET_E_DEFAULT_ACTION;
}
STDMETHODIMP CWebCtrl::DocSite::XInternetSecurityManager::SetSecuritySite(IInternetSecurityMgrSite *pSite)
{
return INET_E_DEFAULT_ACTION;
}
STDMETHODIMP CWebCtrl::DocSite::XInternetSecurityManager::SetZoneMapping(DWORD dwZone, LPCWSTR lpszPattern, DWORD dwFlags)
{
return INET_E_DEFAULT_ACTION;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -