Implement compatibility aliases for non-prefixed macro names. Require a final semicolon where possible. Correct a recurring error in the docs: IMPLEMENT/DECLARE_CLASS are alias to the DYNAMIC macros, not to the ABSTRACT macros. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64532 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			302 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			302 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        msw/ole/activex.h
 | 
						|
// Purpose:     interface of wxActiveXEvent
 | 
						|
// Author:      wxWidgets team
 | 
						|
// RCS-ID:      $Id$
 | 
						|
// Licence:     wxWindows license
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
/**
 | 
						|
    @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 recieves 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 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 existant 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{wxbase}
 | 
						|
    @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);
 | 
						|
};
 | 
						|
 |