From 1f7d05f01923dd364101719c89d8db383e6f4903 Mon Sep 17 00:00:00 2001 From: Steve Lamerton Date: Sun, 15 Jan 2012 19:05:34 +0000 Subject: [PATCH] Add wxActiveXContainer::QueryClientSiteInterface to allow customisation of ActiveX controls. Closes #13784. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70361 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/ole/activex.h | 1 + interface/wx/msw/ole/activex.h | 15 ++++++++++++++- src/msw/ole/activex.cpp | 18 ++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/include/wx/msw/ole/activex.h b/include/wx/msw/ole/activex.h index f07c262c05..b350f87320 100644 --- a/include/wx/msw/ole/activex.h +++ b/include/wx/msw/ole/activex.h @@ -169,6 +169,7 @@ public: void OnSetFocus(wxFocusEvent&); void OnKillFocus(wxFocusEvent&); virtual bool MSWTranslateMessage(WXMSG* pMsg); + virtual bool QueryClientSiteInterface(REFIID iid, void **_interface, const char *&desc); protected: friend class FrameSite; diff --git a/interface/wx/msw/ole/activex.h b/interface/wx/msw/ole/activex.h index a8e9af8b3d..9f4bda5ff7 100644 --- a/interface/wx/msw/ole/activex.h +++ b/interface/wx/msw/ole/activex.h @@ -267,7 +267,7 @@ public: }; wxIMPLEMENT_DYNAMIC_CLASS(wxPDFMediaBackend, wxMediaBackend); - + // Put this in one of your existing source files and then create a wxMediaCtrl with wxMediaCtrl* mymediactrl = new wxMediaCtrl(this, "myfile.pdf", wxID_ANY, wxDefaultPosition, wxSize(300,300), @@ -297,5 +297,18 @@ public: Interface of ActiveX control. */ wxActiveXContainer(wxWindow* parent, REFIID iid, IUnknown* pUnk); + /** + Queries host's site for interface. + + @param iid + The iid of the required interface. + @param _interface + Double pointer to outgoing interface. Supply your own interface if desired. + @param desc + The description of the outgoing interface. + @return bool + Return true if interface supplied else return false. + */ + virtual bool QueryClientSiteInterface(REFIID iid, void **_interface, const char *&desc); }; diff --git a/src/msw/ole/activex.cpp b/src/msw/ole/activex.cpp index d161e6d4a6..ce96506b59 100644 --- a/src/msw/ole/activex.cpp +++ b/src/msw/ole/activex.cpp @@ -633,6 +633,10 @@ public: return S_OK; } + friend bool QueryClientSiteInterface(FrameSite *self, REFIID iid, void **_interface, const char *&desc) + { + return self->m_window->QueryClientSiteInterface(iid,_interface,desc); + } protected: wxActiveXContainer * m_window; @@ -670,6 +674,7 @@ DEFINE_OLE_TABLE(FrameSite) OLE_IINTERFACE(IOleDocumentSite) OLE_IINTERFACE(IAdviseSink) OLE_IINTERFACE(IOleControlSite) + OLE_INTERFACE_CUSTOM(QueryClientSiteInterface) END_OLE_TABLE @@ -1276,4 +1281,17 @@ bool wxActiveXContainer::MSWTranslateMessage(WXMSG* pMsg) return wxWindow::MSWTranslateMessage(pMsg); } +//--------------------------------------------------------------------------- +// wxActiveXContainer::QueryClientSiteInterface +// +// Called in the host's site's query method for other interfaces. +//--------------------------------------------------------------------------- +bool wxActiveXContainer::QueryClientSiteInterface(REFIID iid, void **_interface, const char *&desc) +{ + wxUnusedVar(iid); + wxUnusedVar(_interface); + wxUnusedVar(desc); + return false; +} + #endif // wxUSE_ACTIVEX -- 2.45.2