⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctrlweb.cpp

📁 著名的下载软件核心Shareaza
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -