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 + -
显示快捷键?