git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37461 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			237 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			237 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
						|
%% Name:        activexcontainer.tex
 | 
						|
%% Purpose:     wxActiveXContainer docs
 | 
						|
%% Author:      Ryan Norton <wxprojects@comcast.net>
 | 
						|
%% Modified by:
 | 
						|
%% Created:     01/30/2005
 | 
						|
%% RCS-ID:      $Id$
 | 
						|
%% Copyright:   (c) Ryan Norton
 | 
						|
%% License:     wxWindows license
 | 
						|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
						|
 | 
						|
\section{\class{wxActiveXContainer}}\label{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 recieve 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 gauranteed to be that
 | 
						|
of the client size of the parent of this wxActiveXContainer.
 | 
						|
 | 
						|
You can also process activex events through wxEVT\_ACTIVEX or the
 | 
						|
corresponding message map macro EVT\_ACTIVEX.
 | 
						|
 | 
						|
\wxheading{See also}
 | 
						|
 | 
						|
\helpref{wxActiveXEvent}{wxactivexevent}
 | 
						|
 | 
						|
\wxheading{Derived from}
 | 
						|
 | 
						|
\helpref{wxControl}{wxcontrol}
 | 
						|
 | 
						|
\wxheading{Include files}
 | 
						|
 | 
						|
<wx/msw/ole/activex.h>
 | 
						|
 | 
						|
\wxheading{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 \helpref{wxMediaCtrl}{wxmediactrl}.
 | 
						|
 | 
						|
\begin{verbatim}
 | 
						|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 | 
						|
//
 | 
						|
// 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(wxT("LoadFile"), fileName).GetBool())
 | 
						|
        {
 | 
						|
            m_PDF.CallMethod(wxT("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(wxT("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(wxT("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(wxT("setShowToolbar"), true);
 | 
						|
            m_PDF.CallMethod(wxT("setShowScrollbars"), true);
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            m_PDF.CallMethod(wxT("setShowToolbar"), false);
 | 
						|
            m_PDF.CallMethod(wxT("setShowScrollbars"), false);
 | 
						|
        }
 | 
						|
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    wxActiveXContainer* m_pAX;
 | 
						|
    wxAutomationObject m_PDF;
 | 
						|
 | 
						|
    DECLARE_DYNAMIC_CLASS(wxPDFMediaBackend)
 | 
						|
};
 | 
						|
 | 
						|
IMPLEMENT_DYNAMIC_CLASS(wxPDFMediaBackend, wxMediaBackend);
 | 
						|
\end{verbatim}
 | 
						|
 | 
						|
Put this in one of your existant source files and then create a wxMediaCtrl with
 | 
						|
\begin{verbatim}
 | 
						|
//[this] is the parent window, "myfile.pdf" is the PDF file to open
 | 
						|
wxMediaCtrl* mymediactrl = new wxMediaCtrl(this, wxT("myfile.pdf"), wxID_ANY,
 | 
						|
                                           wxDefaultPosition, wxSize(300,300),
 | 
						|
                                           0, wxT("wxPDFMediaBackend"));
 | 
						|
\end{verbatim}
 | 
						|
 | 
						|
 | 
						|
\latexignore{\rtfignore{\wxheading{Members}}}
 | 
						|
 | 
						|
\membersection{wxActiveXContainer::wxActiveXContainer}\label{wxactivexcontainerwxactivexcontainer}
 | 
						|
 | 
						|
\func{}{wxActiveXContainer}{
 | 
						|
        \param{wxWindow* }{parent},
 | 
						|
        \param{REFIID }{iid},
 | 
						|
        \param{IUnknown* }{pUnk},
 | 
						|
                   }
 | 
						|
 | 
						|
Creates this activex container.
 | 
						|
 | 
						|
\docparam{parent}{parent of this control.  Must not be NULL.}
 | 
						|
\docparam{iid}{COM IID of pUnk to query. Must be a valid interface to an activex control.}
 | 
						|
\docparam{pUnk}{Interface of activex control}
 | 
						|
 |