Use OLE helper macros in wxWebView to reduce the amount of duplicated code.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70096 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Steve Lamerton
2011-12-22 19:16:12 +00:00
parent 4b4ed3c942
commit 9f194b9de0
2 changed files with 21 additions and 87 deletions

View File

@@ -18,6 +18,7 @@
#include "wx/webview.h"
#include "wx/msw/ole/automtn.h"
#include "wx/msw/ole/activex.h"
#include "wx/msw/ole/oleutils.h"
#include "wx/msw/wrapwin.h"
#include "wx/msw/missing.h"
#include "wx/sharedptr.h"
@@ -295,7 +296,6 @@ private:
class VirtualProtocol : public wxIInternetProtocol
{
protected:
ULONG m_refCount;
wxIInternetProtocolSink* m_protocolSink;
wxString m_html;
VOID * fileP;
@@ -305,12 +305,10 @@ protected:
public:
VirtualProtocol(wxSharedPtr<wxWebViewHandler> handler);
~VirtualProtocol();
~VirtualProtocol() {};
//IUnknown
ULONG STDMETHODCALLTYPE AddRef();
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
ULONG STDMETHODCALLTYPE Release();
DECLARE_IUNKNOWN_METHODS;
//IInternetProtocolRoot
HRESULT STDMETHODCALLTYPE Abort(HRESULT WXUNUSED(hrReason),
@@ -341,18 +339,17 @@ public:
class ClassFactory : public IClassFactory
{
public:
ClassFactory(wxSharedPtr<wxWebViewHandler> handler) : m_refCount(0), m_handler(handler) {}
//IUnknown
ULONG STDMETHODCALLTYPE AddRef();
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
ULONG STDMETHODCALLTYPE Release();
ClassFactory(wxSharedPtr<wxWebViewHandler> handler) : m_handler(handler) {}
//IClassFactory
HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown* pUnkOuter,
REFIID riid, void** ppvObject);
HRESULT STDMETHODCALLTYPE LockServer(BOOL fLock);
//IUnknown
DECLARE_IUNKNOWN_METHODS;
private:
ULONG m_refCount;
wxSharedPtr<wxWebViewHandler> m_handler;
};

View File

@@ -1051,50 +1051,17 @@ void wxWebViewIE::onActiveXEvent(wxActiveXEvent& evt)
VirtualProtocol::VirtualProtocol(wxSharedPtr<wxWebViewHandler> handler)
{
m_refCount = 0;
m_file = NULL;
m_handler = handler;
}
VirtualProtocol::~VirtualProtocol()
{
}
BEGIN_IID_TABLE(VirtualProtocol)
ADD_IID(Unknown)
ADD_RAW_IID(wxIID_IInternetProtocolRoot)
ADD_RAW_IID(wxIID_IInternetProtocol)
END_IID_TABLE;
ULONG VirtualProtocol::AddRef()
{
m_refCount++;
return m_refCount;
}
HRESULT VirtualProtocol::QueryInterface(REFIID riid, void **ppvObject)
{
if(riid == IID_IUnknown || riid == wxIID_IInternetProtocolRoot ||
riid == wxIID_IInternetProtocol)
{
*ppvObject = (wxIInternetProtocol*)this;
AddRef();
return S_OK;
}
else
{
*ppvObject = NULL;
return E_POINTER;
}
}
ULONG VirtualProtocol::Release()
{
m_refCount--;
if (m_refCount > 0)
{
return m_refCount;
}
else
{
delete this;
return 0;
}
}
IMPLEMENT_IUNKNOWN_METHODS(VirtualProtocol)
HRESULT VirtualProtocol::Start(LPCWSTR szUrl, wxIInternetProtocolSink *pOIProtSink,
wxIInternetBindInfo *pOIBindInfo, DWORD grfPI,
@@ -1162,6 +1129,13 @@ HRESULT VirtualProtocol::Read(void *pv, ULONG cb, ULONG *pcbRead)
}
}
BEGIN_IID_TABLE(ClassFactory)
ADD_IID(Unknown)
ADD_IID(ClassFactory)
END_IID_TABLE;
IMPLEMENT_IUNKNOWN_METHODS(ClassFactory)
HRESULT ClassFactory::CreateInstance(IUnknown* pUnkOuter, REFIID riid,
void ** ppvObject)
{
@@ -1181,41 +1155,4 @@ STDMETHODIMP ClassFactory::LockServer(BOOL fLock)
return S_OK;
}
ULONG ClassFactory::AddRef(void)
{
m_refCount++;
return m_refCount;
}
HRESULT ClassFactory::QueryInterface(REFIID riid, void **ppvObject)
{
if ((riid == IID_IUnknown) || (riid == IID_IClassFactory))
{
*ppvObject = this;
AddRef();
return S_OK;
}
else
{
*ppvObject = NULL;
return E_POINTER;
}
}
ULONG ClassFactory::Release(void)
{
m_refCount--;
if (m_refCount > 0)
{
return m_refCount;
}
else
{
delete this;
return 0;
}
}
#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE