| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        msw/ole/activex.h
 
- // Purpose:     interface of wxActiveXEvent
 
- // Author:      wxWidgets team
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- /**
 
-     @class wxActiveXEvent
 
-     An event class for handling ActiveX events passed from wxActiveXContainer.
 
-     ActiveX events are basically a function call with the parameters passed
 
-     through an array of wxVariants along with a return value that is a wxVariant
 
-     itself. What type the parameters or return value are depends on the context
 
-     (i.e. what the .idl specifies).
 
-     @beginEventTable{wxActiveXEvent}
 
-     @event{EVT_ACTIVEX(func)}
 
-         Sent when the ActiveX control hosted by wxActiveXContainer receives an
 
-         ActiveX event.
 
-     @endEventTable
 
-     ActiveX event parameters can get extremely complex and may be beyond the
 
-     abilities of wxVariant. If 'operator[]' fails, prints an error messages or
 
-     crashes the application, event handlers should use GetNativeParameters()
 
-     instead to obtain the original event information.
 
-     Calls to operator[] and GetNativeParmeters() can be mixed. It is valid
 
-     to handle some parameters of an event with operator[] and others directly
 
-     through GetNativeParameters(). It is \b not valid however to manipulate
 
-     the same parameter using both approaches at the same time.
 
-     @onlyfor{wxmsw}
 
-     @library{wxcore}
 
-     @category{events}
 
- */
 
- class wxActiveXEvent : public wxCommandEvent
 
- {
 
- public:
 
-     /**
 
-         Returns the dispatch id of this ActiveX event.
 
-         This is the numeric value from the .idl file specified by the id().
 
-     */
 
-     DISPID GetDispatchId(int idx) const;
 
-     /**
 
-         Obtains the number of parameters passed through the ActiveX event.
 
-     */
 
-     size_t ParamCount() const;
 
-     /**
 
-         Obtains the param name of the param number idx specifies as a string.
 
-     */
 
-     wxString ParamName(size_t idx) const;
 
-     /**
 
-         Obtains the param type of the param number idx specifies as a string.
 
-     */
 
-     wxString ParamType(size_t idx) const;
 
-     /**
 
-         Obtains the actual parameter value specified by idx.
 
-     */
 
-     wxVariant operator[](size_t idx);
 
-     /**
 
-         Obtain the original MSW parameters for the event.
 
-         Event handlers can use this information to handle complex event parameters
 
-         that are beyond the scope of wxVariant.
 
-         The information returned here is the information passed to the original
 
-         'Invoke' method call.
 
-         \return a pointer to a struct containing the original MSW event parameters
 
-     */
 
-     wxActiveXEventNativeMSW *GetNativeParameters() const;
 
- };
 
- /**
 
-     @class wxActiveXContainer
 
-     wxActiveXContainer is a host for an ActiveX control on Windows (and as such
 
-     is a platform-specific class).
 
-     Note that the HWND that the class contains is the actual HWND of the ActiveX
 
-     control so using dynamic events and connecting to @c wxEVT_SIZE, for example,
 
-     will receive the actual size message sent to the control.
 
-     It is somewhat similar to the ATL class CAxWindow in operation.
 
-     The size of the ActiveX control's content is generally guaranteed to be that
 
-     of the client size of the parent of this wxActiveXContainer.
 
-     You can also process ActiveX events through wxActiveXEvent.
 
-     @section activexcontainer_example Example
 
-     This is an example of how to use the Adobe Acrobat Reader ActiveX control to
 
-     read PDF files (requires Acrobat Reader 4 and up).
 
-     Controls like this are typically found and dumped from OLEVIEW.exe that is
 
-     distributed with Microsoft Visual C++.
 
-     This example also demonstrates how to create a backend for wxMediaCtrl.
 
-     @code
 
-     //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
-     //
 
-     // wxPDFMediaBackend
 
-     //
 
-     // http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/iac/IACOverview.pdf
 
-     //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
-     #include "wx/mediactrl.h"       // wxMediaBackendCommonBase
 
-     #include "wx/msw/ole/activex.h" // wxActiveXContainer
 
-     #include "wx/msw/ole/automtn.h" // wxAutomationObject
 
-     const IID DIID__DPdf = {0xCA8A9781,0x280D,0x11CF,{0xA2,0x4D,0x44,0x45,0x53,0x54,0x00,0x00}};
 
-     const IID DIID__DPdfEvents = {0xCA8A9782,0x280D,0x11CF,{0xA2,0x4D,0x44,0x45,0x53,0x54,0x00,0x00}};
 
-     const CLSID CLSID_Pdf = {0xCA8A9780,0x280D,0x11CF,{0xA2,0x4D,0x44,0x45,0x53,0x54,0x00,0x00}};
 
-     class WXDLLIMPEXP_MEDIA wxPDFMediaBackend : public wxMediaBackendCommonBase
 
-     {
 
-     public:
 
-         wxPDFMediaBackend() : m_pAX(NULL) {}
 
-         virtual ~wxPDFMediaBackend()
 
-         {
 
-             if(m_pAX)
 
-             {
 
-                 m_pAX->DissociateHandle();
 
-                 delete m_pAX;
 
-             }
 
-         }
 
-         virtual bool CreateControl(wxControl* ctrl, wxWindow* parent,
 
-                                         wxWindowID id,
 
-                                         const wxPoint& pos,
 
-                                         const wxSize& size,
 
-                                         long style,
 
-                                         const wxValidator& validator,
 
-                                         const wxString& name)
 
-         {
 
-             IDispatch* pDispatch;
 
-             if( ::CoCreateInstance(CLSID_Pdf, NULL,
 
-                                     CLSCTX_INPROC_SERVER,
 
-                                     DIID__DPdf, (void**)&pDispatch) != 0 )
 
-                 return false;
 
-             m_PDF.SetDispatchPtr(pDispatch); // wxAutomationObject will release itself
 
-             if ( !ctrl->wxControl::Create(parent, id, pos, size,
 
-                                     (style & ~wxBORDER_MASK) | wxBORDER_NONE,
 
-                                     validator, name) )
 
-                 return false;
 
-             m_ctrl = wxStaticCast(ctrl, wxMediaCtrl);
 
-             m_pAX = new wxActiveXContainer(ctrl,
 
-                         DIID__DPdf,
 
-                         pDispatch);
 
-             wxPDFMediaBackend::ShowPlayerControls(wxMEDIACTRLPLAYERCONTROLS_NONE);
 
-             return true;
 
-         }
 
-         virtual bool Play()
 
-         {
 
-             return true;
 
-         }
 
-         virtual bool Pause()
 
-         {
 
-             return true;
 
-         }
 
-         virtual bool Stop()
 
-         {
 
-             return true;
 
-         }
 
-         virtual bool Load(const wxString& fileName)
 
-         {
 
-             if(m_PDF.CallMethod("LoadFile", fileName).GetBool())
 
-             {
 
-                 m_PDF.CallMethod("setCurrentPage", wxVariant((long)0));
 
-                 NotifyMovieLoaded(); // initial refresh
 
-                 wxSizeEvent event;
 
-                 m_pAX->OnSize(event);
 
-                 return true;
 
-             }
 
-             return false;
 
-         }
 
-         virtual bool Load(const wxURI& location)
 
-         {
 
-             return m_PDF.CallMethod("LoadFile", location.BuildUnescapedURI()).GetBool();
 
-         }
 
-         virtual bool Load(const wxURI& WXUNUSED(location),
 
-                         const wxURI& WXUNUSED(proxy))
 
-         {
 
-             return false;
 
-         }
 
-         virtual wxMediaState GetState()
 
-         {
 
-             return wxMEDIASTATE_STOPPED;
 
-         }
 
-         virtual bool SetPosition(wxLongLong where)
 
-         {
 
-             m_PDF.CallMethod("setCurrentPage", wxVariant((long)where.GetValue()));
 
-             return true;
 
-         }
 
-         virtual wxLongLong GetPosition()
 
-         {
 
-             return 0;
 
-         }
 
-         virtual wxLongLong GetDuration()
 
-         {
 
-             return 0;
 
-         }
 
-         virtual void Move(int WXUNUSED(x), int WXUNUSED(y),
 
-                         int WXUNUSED(w), int WXUNUSED(h))
 
-         {
 
-         }
 
-         wxSize GetVideoSize() const
 
-         {
 
-             return wxDefaultSize;
 
-         }
 
-         virtual double GetPlaybackRate()
 
-         {
 
-             return 0;
 
-         }
 
-         virtual bool SetPlaybackRate(double)
 
-         {
 
-             return false;
 
-         }
 
-         virtual double GetVolume()
 
-         {
 
-             return 0;
 
-         }
 
-         virtual bool SetVolume(double)
 
-         {
 
-             return false;
 
-         }
 
-         virtual bool ShowPlayerControls(wxMediaCtrlPlayerControls flags)
 
-         {
 
-             if(flags)
 
-             {
 
-                 m_PDF.CallMethod("setShowToolbar", true);
 
-                 m_PDF.CallMethod("setShowScrollbars", true);
 
-             }
 
-             else
 
-             {
 
-                 m_PDF.CallMethod("setShowToolbar", false);
 
-                 m_PDF.CallMethod("setShowScrollbars", false);
 
-             }
 
-             return true;
 
-         }
 
-         wxActiveXContainer* m_pAX;
 
-         wxAutomationObject m_PDF;
 
-         wxDECLARE_DYNAMIC_CLASS(wxPDFMediaBackend)
 
-     };
 
-     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),
 
-                                             0, "wxPDFMediaBackend");
 
-             // [this] is the parent window, "myfile.pdf" is the PDF file to open
 
-     @endcode
 
-     @onlyfor{wxmsw}
 
-     @library{wxcore}
 
-     @category{ctrl,ipc}
 
-     @see wxActiveXEvent, @ref page_samples_flash
 
- */
 
- class wxActiveXContainer : public wxControl
 
- {
 
- public:
 
-     /**
 
-         Creates this ActiveX container.
 
-         @param parent
 
-             parent of this control. Must not be @NULL.
 
-         @param iid
 
-             COM IID of pUnk to query. Must be a valid interface to an ActiveX control.
 
-         @param pUnk
 
-             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);
 
- };
 
 
  |