win32webbrowserhost.h

来自「这是VCF框架的代码」· C头文件 代码 · 共 2,204 行 · 第 1/4 页

H
2,204
字号
#ifndef _VCF_WIN32WEBBROWSERHOST_H__#define _VCF_WIN32WEBBROWSERHOST_H__#if _MSC_VER > 1000#   pragma once#endif#include "vcf/HTMLKit/Win32HTMLDOMElements.h"#ifndef _VCF_WIN32HTMLDOMELEMENTS_H__ //we need to pull all this stuff in#include <exdisp.h>		// Defines of stuff like IWebBrowser2. This is an include file with Visual C 6 and above#include <mshtml.h>		// Defines of stuff like IHTMLDocument2. This is an include file with Visual C 6 and above#include <mshtmhst.h>	// Defines of stuff like IDocHostUIHandler. This is an include file with Visual C 6 and above#include "thirdparty/win32/comet/threading.h"#include "thirdparty/win32/comet/uuid.h"#include "thirdparty/win32/comet/bstr.h"#include "thirdparty/win32/comet/safearray.h"#include "vcf/ApplicationKit/Win32HResult.h"#include <vector>#define COM_PTR(ifc) \namespace comet { \template<> struct comtype<ifc> { \	static const IID& uuid() { \        static const IID iid = IID_##ifc; \        return iid; \	} \    typedef nil base;\};\};\typedef comet::com_ptr<ifc> ifc##Ptr;\\COM_PTR(IHTMLDocument2)COM_PTR(IHTMLElement)COM_PTR(IHTMLElementCollection)COM_PTR(IWebBrowser2)#endif //_VCF_WIN32HTMLDOMELEMENTS_H__using namespace comet;typedef VCF::hresult hresult;class IOleInPlaceFrameImpl : public IOleInPlaceFrame {public:	IOleInPlaceFrameImpl():wnd_(NULL){}	STDMETHOD(QueryInterface)( REFIID iid, void ** ppvObject ) {		if ( iid == IID_IOleInPlaceFrame ) {			*ppvObject = (void*)(IOleInPlaceFrame*)this;			return S_OK;		}				else if ( iid == IID_IOleInPlaceUIWindow ) {			*ppvObject = (void*)(IOleInPlaceUIWindow*)this;			return S_OK;		}		else if ( iid == IID_IOleWindow ) {			*ppvObject = (void*)(IOleWindow*)this;			return S_OK;		}		else if ( iid == IID_IUnknown ) {			*ppvObject = (void*)(IUnknown*)this;			return S_OK;		}		return E_NOINTERFACE;	}	STDMETHODIMP_(ULONG)AddRef() {		return 0;	}	STDMETHODIMP_(ULONG)Release() {		return 0;	}//IOleWindow	STDMETHOD(GetWindow) ( HWND *phwnd ) {		*phwnd = wnd_;		return S_OK;	}		STDMETHOD(ContextSensitiveHelp)( BOOL fEnterMode ) {		return E_NOTIMPL;	}//IOleInPlaceUIWindow 	STDMETHOD(GetBorder)( LPRECT lprectBorder) {		return E_NOTIMPL;	}            STDMETHOD(RequestBorderSpace)( LPCBORDERWIDTHS pborderwidths ) {		return E_NOTIMPL;	}		STDMETHOD(SetBorderSpace)( LPCBORDERWIDTHS pborderwidths ) {		return E_NOTIMPL;	}		STDMETHOD(SetActiveObject)( IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName) {		return E_NOTIMPL;	}//IOleInPlaceFrame 	STDMETHOD(InsertMenus)( HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths ) {		return E_NOTIMPL;	}        	STDMETHOD(SetMenu)( HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject) {		return E_NOTIMPL;	}		STDMETHOD(RemoveMenus)( HMENU hmenuShared ) {		return E_NOTIMPL;	}			STDMETHOD(SetStatusText)( LPCOLESTR pszStatusText ) {		return E_NOTIMPL;	}		STDMETHOD(EnableModeless)( BOOL fEnable ) {		return E_NOTIMPL;	}        	STDMETHOD(TranslateAccelerator)( LPMSG lpmsg, WORD wID ) {		return E_NOTIMPL;	}	HWND wnd_;};class IOleInPlaceSiteImpl : public IOleInPlaceSite {public:	IOleInPlaceSiteImpl(): frameImpl_(NULL){}	STDMETHOD(QueryInterface)( REFIID iid, void ** ppvObject ) {		if ( iid == IID_IOleInPlaceSite ) {			*ppvObject = (void*)(IOleInPlaceSite*)this;			return S_OK;		}		else if ( iid == IID_IOleWindow ) {			*ppvObject = (void*)(IOleWindow*)this;			return S_OK;		}		else if ( iid == IID_IUnknown ) {			*ppvObject = (void*)(IUnknown*)this;			return S_OK;		}		return E_NOINTERFACE;	}	STDMETHODIMP_(ULONG)AddRef() {		return 0;	}	STDMETHODIMP_(ULONG)Release() {		return 0;	}	//IOleWindow	STDMETHOD(GetWindow) ( HWND *phwnd ) {		*phwnd = frameImpl_->wnd_;		return S_OK;	}		STDMETHOD(ContextSensitiveHelp)( BOOL fEnterMode ) {		return E_NOTIMPL;	}	//IOleInPlaceSite	STDMETHOD(CanInPlaceActivate)() {		return S_OK;	}        	STDMETHOD(OnInPlaceActivate)() {		return S_OK;	}        	STDMETHOD(OnUIActivate)() {		return S_OK;	}            STDMETHOD(GetWindowContext)( IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc,		LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)  {		*ppFrame = frameImpl_;				// We have no OLEINPLACEUIWINDOW		*ppDoc = NULL;				// Fill in some other info for the browser		lpFrameInfo->fMDIApp = FALSE;		lpFrameInfo->hwndFrame = frameImpl_->wnd_;		lpFrameInfo->haccel = 0;		lpFrameInfo->cAccelEntries = 0;		return S_OK;	}        	STDMETHOD(Scroll)( SIZE scrollExtant ) {		return E_NOTIMPL;	}        	STDMETHOD(OnUIDeactivate)( BOOL fUndoable ) {		return S_OK;	}        	STDMETHOD(OnInPlaceDeactivate)() {		return S_OK;	}        	STDMETHOD(DiscardUndoState)() {		return E_NOTIMPL;	}        	STDMETHOD(DeactivateAndUndo)()  {		return E_NOTIMPL;	}        	STDMETHOD(OnPosRectChange)( LPCRECT lprcPosRect ) {		com_ptr<IOleInPlaceObject> inplace;		IOleInPlaceObject* tmp;		HRESULT res = browserObject_->QueryInterface( IID_IOleInPlaceObject, (void**)&tmp );		if ( SUCCEEDED(res) ) {			inplace = tmp;			inplace->SetObjectRects( lprcPosRect, lprcPosRect );		}		return S_OK;	}	com_ptr<IOleObject> browserObject_;	IOleInPlaceFrameImpl* frameImpl_;};class IDocHostUIHandlerImpl : public IDocHostUIHandler {public:	IDocHostUIHandlerImpl(): realImpl_(NULL) {}	STDMETHOD(QueryInterface)( REFIID iid, void ** ppvObject ) {		if ( iid == IID_IDocHostUIHandler ) {			*ppvObject = (void*)(IDocHostUIHandler*)this;			return S_OK;		}		else if ( iid == IID_IUnknown ) {			*ppvObject = (void*)(IUnknown*)this;			return S_OK;		}		return E_NOINTERFACE;	}	STDMETHODIMP_(ULONG)AddRef() {		return 0;	}	STDMETHODIMP_(ULONG)Release() {		return 0;	}	STDMETHOD(ShowContextMenu)( DWORD hWndID, POINT *ppt, 								IUnknown *pcmdtReserved, IDispatch *pdispReserved) {		if ( NULL != realImpl_ ) {			return realImpl_->ShowContextMenu(hWndID,ppt,pcmdtReserved,pdispReserved);		}		return E_NOTIMPL;	}	STDMETHOD(GetHostInfo)( DOCHOSTUIINFO *pInfo ) {		if ( NULL != realImpl_ ) {			return realImpl_->GetHostInfo(pInfo);		}		pInfo->cbSize = sizeof(DOCHOSTUIINFO);		pInfo->dwFlags = DOCHOSTUIFLAG_NO3DBORDER;		pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT;		return S_OK;	}		STDMETHOD(ShowUI)( DWORD dwID, IOleInPlaceActiveObject *pActiveObject,						IOleCommandTarget *pCommandTarget, IOleInPlaceFrame *pFrame,						IOleInPlaceUIWindow *pDoc) {		if ( NULL != realImpl_ ) {			return realImpl_->ShowUI(dwID,pActiveObject,pCommandTarget,pFrame,pDoc);		}		return S_OK;	}	STDMETHOD(HideUI)(void) {		if ( NULL != realImpl_ ) {			return realImpl_->HideUI();		}		return E_NOTIMPL;	}	STDMETHOD(UpdateUI)(void) {		if ( NULL != realImpl_ ) {			return realImpl_->UpdateUI();		}		return S_OK;	}	STDMETHOD(EnableModeless)( BOOL fEnable) {		if ( NULL != realImpl_ ) {			return realImpl_->EnableModeless(fEnable);		}		return E_NOTIMPL;	}	STDMETHOD(OnDocWindowActivate)( BOOL fEnable ) {		if ( NULL != realImpl_ ) {			return realImpl_->OnDocWindowActivate(fEnable);		}		return E_NOTIMPL;	}	STDMETHOD(OnFrameWindowActivate)( BOOL fEnable ) {		if ( NULL != realImpl_ ) {			return realImpl_->OnFrameWindowActivate(fEnable);		}		return E_NOTIMPL;	}	STDMETHOD(ResizeBorder)( LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow ) {		if ( NULL != realImpl_ ) {			return realImpl_->ResizeBorder(prcBorder,pUIWindow,fRameWindow);		}		return E_NOTIMPL;	}	STDMETHOD(TranslateAccelerator)( LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID ) {		if ( NULL != realImpl_ ) {			return realImpl_->TranslateAccelerator(lpMsg,pguidCmdGroup,nCmdID);		}		return S_OK;	}	STDMETHOD(GetOptionKeyPath)( LPOLESTR *pchKey, DWORD dw) {		if ( NULL != realImpl_ ) {			return realImpl_->GetOptionKeyPath(pchKey,dw);		}		return S_FALSE;	}	STDMETHOD(GetDropTarget)( IDropTarget *pDropTarget, IDropTarget **ppDropTarget) {		if ( NULL != realImpl_ ) {			return realImpl_->GetDropTarget(pDropTarget,ppDropTarget);		}		return E_NOTIMPL;	}	STDMETHOD(GetExternal)( IDispatch **ppDispatch) {		if ( NULL != realImpl_ ) {			return realImpl_->GetExternal(ppDispatch);		}		return E_NOTIMPL;	}		STDMETHOD(TranslateUrl)( DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut) {		if ( NULL != realImpl_ ) {			return realImpl_->TranslateUrl(dwTranslate,pchURLIn,ppchURLOut);		}		return E_NOTIMPL;	}	STDMETHOD(FilterDataObject)( IDataObject *pDO, IDataObject **ppDORet) {		if ( NULL != realImpl_ ) {			return realImpl_->FilterDataObject(pDO,ppDORet);		}		return E_NOTIMPL;	}		IDocHostUIHandlerImpl* realImpl_;};class IDispatchImpl : public IDispatch {public:		STDMETHOD(QueryInterface)( REFIID iid, void ** ppvObject ) {		if ( iid == IID_IDispatch ) {			*ppvObject = (void*)(IDispatch*)this;			return S_OK;		}		else if ( iid == IID_IUnknown ) {			*ppvObject = (void*)(IUnknown*)this;			return S_OK;		}		return E_NOINTERFACE;	}	STDMETHODIMP_(ULONG)AddRef() {		return 0;	}	STDMETHODIMP_(ULONG)Release() {		return 0;	}	STDMETHOD(GetTypeInfoCount)( UINT *iTInfo ) {		return E_NOTIMPL;	}	STDMETHOD(GetTypeInfo) ( UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo ) {		return E_NOTIMPL;	}	STDMETHOD(GetIDsOfNames)( REFIID riid, LPOLESTR* rgszNames, UINT cNames, 								LCID lcid, DISPID* rgDispId )	{		return E_NOTIMPL;	}	STDMETHOD(Invoke)( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, 					DISPPARAMS* pDispParams, VARIANT* pVarResult, 					EXCEPINFO* pExcepInfo, UINT* puArgErr ) {		return E_NOTIMPL;	}};class IServiceProviderImpl : public IServiceProvider {public:	IServiceProviderImpl(){}	STDMETHOD(QueryInterface)( REFIID iid, void ** ppvObject ) {		if ( iid == IID_IServiceProvider ) {			*ppvObject = (void*)(IServiceProvider*)this;			return S_OK;		}		else if ( iid == IID_IUnknown ) {			*ppvObject = (void*)(IUnknown*)this;			return S_OK;		}		return E_NOINTERFACE;	}	STDMETHODIMP_(ULONG)AddRef() {		return 0;	}	STDMETHODIMP_(ULONG)Release() {		return 0;	}		STDMETHOD (QueryService)( REFGUID guidService, REFIID riid, void **ppv ) {		return E_NOINTERFACE;	}};class IAuthenticateImpl : public IAuthenticate {public:	IAuthenticateImpl(){};	STDMETHOD (QueryInterface) (REFIID  riid, void** ppObj ) {		if ( riid == IID_IAuthenticate ) {			*ppObj = (void*) (IAuthenticate*)this;			return S_OK;		}		else if ( riid == IID_IUnknown ) {			*ppObj = (void*) (IUnknown*)this;			return S_OK;		}		return E_NOINTERFACE;	}	STDMETHODIMP_(ULONG)AddRef() {		return 0;	}	STDMETHODIMP_(ULONG)Release() {		return 0;	}	STDMETHOD(Authenticate)( HWND* phwnd, LPWSTR* pszUsername, 							LPWSTR* pszPassword) {		return E_NOTIMPL;	}};class IOleClientSiteImpl : public IOleClientSite {public:	IOleClientSiteImpl() : inPlaceSite_(NULL), docUI_(NULL), serviceProvider_(NULL) {}	STDMETHOD(QueryInterface)( REFIID iid, void ** ppvObject ) {				if ( iid == IID_IOleClientSite ) {			*ppvObject = (void*)(IOleClientSite*)this;			return S_OK;		}		else if ( iid == IID_IOleInPlaceSite ) {						return inPlaceSite_->QueryInterface(iid,ppvObject);		}		else if ( iid == IID_IDocHostUIHandler ) {						return docUI_->QueryInterface(iid,ppvObject);		}		else if ( iid == IID_IServiceProvider ) {			return serviceProvider_->QueryInterface(iid,ppvObject);		}		else if ( iid == IID_IUnknown ) {			*ppvObject = (void*)(IUnknown*)this;			return S_OK;		}		return E_NOINTERFACE;	}	STDMETHODIMP_(ULONG)AddRef() {		return 0;	}	STDMETHODIMP_(ULONG)Release() {		return 0;	}		STDMETHOD(SaveObject)() {		return E_NOTIMPL;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?