mediactrl.cpp
来自「A*算法 A*算法 A*算法 A*算法A*算法A*算法」· C++ 代码 · 共 1,438 行 · 第 1/5 页
CPP
1,438 行
const wxPoint& pos,
const wxSize& size,
long style,
const wxValidator& validator,
const wxString& name);
virtual bool Play();
virtual bool Pause();
virtual bool Stop();
virtual bool Load(const wxString& fileName);
virtual bool Load(const wxURI& location);
virtual bool Load(const wxURI& location, const wxURI& proxy);
bool DoLoad(const wxString& location);
void FinishLoad();
virtual wxMediaState GetState();
virtual bool SetPosition(wxLongLong where);
virtual wxLongLong GetPosition();
virtual wxLongLong GetDuration();
virtual void Move(int x, int y, int w, int h);
wxSize GetVideoSize() const;
virtual double GetPlaybackRate();
virtual bool SetPlaybackRate(double);
virtual double GetVolume();
virtual bool SetVolume(double);
virtual bool ShowPlayerControls(wxMediaCtrlPlayerControls flags);
void Cleanup();
void DoGetDownloadProgress(wxLongLong*, wxLongLong*);
virtual wxLongLong GetDownloadProgress()
{
wxLongLong progress, total;
DoGetDownloadProgress(&progress, &total);
return progress;
}
virtual wxLongLong GetDownloadTotal()
{
wxLongLong progress, total;
DoGetDownloadProgress(&progress, &total);
return total;
}
wxActiveXContainer* m_pAX;
IActiveMovie* m_pAM;
IMediaPlayer* m_pMP;
wxTimer* m_pTimer;
wxSize m_bestSize;
#ifdef __WXDEBUG__
wxDynamicLibrary m_dllQuartz;
LPAMGETERRORTEXT m_lpAMGetErrorText;
wxString GetErrorString(HRESULT hrdsv);
#endif // __WXDEBUG__
DECLARE_DYNAMIC_CLASS(wxAMMediaBackend)
};
//---------------------------------------------------------------------------
//
// wxMCIMediaBackend
//
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// MCI Includes
//---------------------------------------------------------------------------
#ifndef __WXWINCE__
#include <mmsystem.h>
class WXDLLIMPEXP_MEDIA wxMCIMediaBackend : public wxMediaBackendCommonBase
{
public:
wxMCIMediaBackend();
~wxMCIMediaBackend();
virtual bool CreateControl(wxControl* ctrl, wxWindow* parent,
wxWindowID id,
const wxPoint& pos,
const wxSize& size,
long style,
const wxValidator& validator,
const wxString& name);
virtual bool Play();
virtual bool Pause();
virtual bool Stop();
virtual bool Load(const wxURI& location,
const wxURI& proxy)
{ return wxMediaBackend::Load(location, proxy); }
virtual bool Load(const wxString& fileName);
virtual bool Load(const wxURI& location);
virtual wxMediaState GetState();
virtual bool SetPosition(wxLongLong where);
virtual wxLongLong GetPosition();
virtual wxLongLong GetDuration();
virtual void Move(int x, int y, int w, int h);
wxSize GetVideoSize() const;
virtual double GetPlaybackRate();
virtual bool SetPlaybackRate(double dRate);
virtual double GetVolume();
virtual bool SetVolume(double);
static LRESULT CALLBACK NotifyWndProc(HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK OnNotifyWndProc(HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam);
MCIDEVICEID m_hDev; //Our MCI Device ID/Handler
HWND m_hNotifyWnd; //Window to use for MCI events
bool m_bVideo; //Whether or not we have video
DECLARE_DYNAMIC_CLASS(wxMCIMediaBackend)
};
#endif
//---------------------------------------------------------------------------
//
// wxQTMediaBackend
//
// We don't include Quicktime headers here and define all the types
// ourselves because looking for the quicktime libaries etc. would
// be tricky to do and making this a dependency for the MSVC projects
// would be unrealistic.
//
// Thanks to Robert Roebling for the wxDL macro/library idea
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// QT Includes
//---------------------------------------------------------------------------
//#include <qtml.h> //Windoze QT include
//#include <QuickTimeComponents.h> //Standard QT stuff
#include "wx/dynlib.h"
//---------------------------------------------------------------------------
// QT Types
//---------------------------------------------------------------------------
typedef struct MovieRecord* Movie;
typedef wxInt16 OSErr;
typedef wxInt32 OSStatus;
#define noErr 0
#define fsRdPerm 1
typedef unsigned char Str255[256];
#define StringPtr unsigned char*
#define newMovieActive 1
#define newMovieAsyncOK (1 << 8)
#define Ptr char*
#define Handle Ptr*
#define Fixed long
#define OSType unsigned long
#define CGrafPtr struct GrafPort *
#define TimeScale long
#define TimeBase struct TimeBaseRecord *
typedef struct ComponentInstanceRecord * ComponentInstance;
#define kMovieLoadStatePlayable 10000
#define Boolean int
#define MovieController ComponentInstance
#ifndef URLDataHandlerSubType
#if defined(__WATCOMC__) || defined(__MINGW32__)
// use magic numbers for compilers which complain about multicharacter integers
const OSType URLDataHandlerSubType = 1970433056;
const OSType VisualMediaCharacteristic = 1702454643;
#else
const OSType URLDataHandlerSubType = 'url ';
const OSType VisualMediaCharacteristic = 'eyes';
#endif
#endif
struct FSSpec {
short vRefNum;
long parID;
Str255 name; /*Str63 on mac, Str255 on msw */
};
struct Rect {
short top;
short left;
short bottom;
short right;
};
struct wide {
wxInt32 hi;
wxUint32 lo;
};
struct TimeRecord {
wide value; /* units */
TimeScale scale; /* units per second */
TimeBase base;
};
struct Point {
short v;
short h;
};
struct EventRecord {
wxUint16 what;
wxUint32 message;
wxUint32 when;
Point where;
wxUint16 modifiers;
};
enum {
mcTopLeftMovie = 1,
mcScaleMovieToFit = 2,
mcWithBadge = 4,
mcNotVisible = 8,
mcWithFrame = 16
};
//---------------------------------------------------------------------------
// QT Library
//---------------------------------------------------------------------------
#define wxDL_METHOD_DEFINE( rettype, name, args, shortargs, defret ) \
typedef rettype (* name ## Type) args ; \
name ## Type pfn_ ## name; \
rettype name args \
{ if (m_ok) return pfn_ ## name shortargs ; return defret; }
#define wxDL_VOIDMETHOD_DEFINE( name, args, shortargs ) \
typedef void (* name ## Type) args ; \
name ## Type pfn_ ## name; \
void name args \
{ if (m_ok) pfn_ ## name shortargs ; }
#define wxDL_METHOD_LOAD( lib, name, success ) \
pfn_ ## name = (name ## Type) lib.GetSymbol( wxT(#name), &success ); \
if (!success) { wxLog::EnableLogging(bWasLoggingEnabled); return false; }
class WXDLLIMPEXP_MEDIA wxQuickTimeLibrary
{
public:
~wxQuickTimeLibrary()
{
if(m_dll.IsLoaded())
m_dll.Unload();
}
bool Initialize();
bool IsOk() const {return m_ok;}
protected:
wxDynamicLibrary m_dll;
bool m_ok;
public:
wxDL_VOIDMETHOD_DEFINE( StartMovie, (Movie m), (m) );
wxDL_VOIDMETHOD_DEFINE( StopMovie, (Movie m), (m) );
wxDL_METHOD_DEFINE( bool, IsMovieDone, (Movie m), (m), false);
wxDL_VOIDMETHOD_DEFINE( GoToBeginningOfMovie, (Movie m), (m) );
wxDL_METHOD_DEFINE( OSErr, GetMoviesError, (), (), -1);
wxDL_METHOD_DEFINE( OSErr, EnterMovies, (), (), -1);
wxDL_VOIDMETHOD_DEFINE( ExitMovies, (), () );
wxDL_METHOD_DEFINE( OSErr, InitializeQTML, (long flags), (flags), -1);
wxDL_VOIDMETHOD_DEFINE( TerminateQTML, (), () );
wxDL_METHOD_DEFINE( OSErr, NativePathNameToFSSpec,
(char* inName, FSSpec* outFile, long flags),
(inName, outFile, flags), -1);
wxDL_METHOD_DEFINE( OSErr, OpenMovieFile,
(const FSSpec * fileSpec, short * resRefNum, wxInt8 permission),
(fileSpec, resRefNum, permission), -1 );
wxDL_METHOD_DEFINE( OSErr, CloseMovieFile,
(short resRefNum), (resRefNum), -1);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?