⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vidwin.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
字号:
// -----------------------------------------------------------------------------// Name:       vidwin.h// Purpose:    wxMMedia// Author:     Guilhem Lavaux// Created:    February 1998// Updated:// Copyright:  (C) 1998, 1999, 2000 Guilhem Lavaux// License:    wxWindows license// -----------------------------------------------------------------------------#include "wx/wxprec.h"#ifndef WX_PRECOMP#include "wx/wx.h"#endif#if defined(__WINDOWS__) && !defined(__MINGW32__) && !defined(__WATCOMC__) && !defined(__CYGWIN__)// versions of Open Watcom and MinGW tested against this source does not// deliver "digitalv.h" required in this feature#ifdef __BORLANDC__    #pragma hdrstop#endif#include "wx/stream.h"#include "wx/wfstream.h"#define WXMMEDIA_INTERNAL#include <windows.h>#include <mmsystem.h>#include <digitalv.h>#include "wx/mmedia/vidwin.h"#ifdef __BORLANDC__#pragma hdrstop#endifIMPLEMENT_DYNAMIC_CLASS(wxVideoWindows, wxVideoBaseDriver)wxVideoWindows::wxVideoWindows(){}wxVideoWindows::wxVideoWindows(wxInputStream& str)  : wxVideoBaseDriver(str){    m_internal    = new wxVIDWinternal;    m_remove_file = true;    m_filename    = wxGetTempFileName(_T("wxvid"));    m_paused      = false;    m_stopped     = true;    m_frameRate   = 1.0;        wxFileOutputStream temp_file(m_filename);    temp_file << str;    OpenFile();}wxVideoWindows::wxVideoWindows(const wxString& filename)  : wxVideoBaseDriver(filename){    m_internal    = new wxVIDWinternal;    m_remove_file = false;    m_filename    = filename;    m_paused      = false;    m_stopped     = true;    m_frameRate   = 1.0;    OpenFile();}wxVideoWindows::~wxVideoWindows(void){    mciSendCommand(m_internal->m_dev_id, MCI_CLOSE, 0, 0);    if (m_internal)        delete m_internal;}void wxVideoWindows::OpenFile(){    MCI_DGV_OPEN_PARMS openStruct;    MCI_DGV_SET_PARMS setStruct;    MCI_STATUS_PARMS statusStruct;    openStruct.lpstrDeviceType = _T("avivideo");    openStruct.lpstrElementName = (wxChar *)m_filename.c_str();    openStruct.hWndParent = 0;        mciSendCommand(0, MCI_OPEN,             MCI_OPEN_ELEMENT|MCI_DGV_OPEN_PARENT|MCI_OPEN_TYPE|MCI_DGV_OPEN_32BIT,                         (DWORD)(LPVOID)&openStruct);    m_internal->m_dev_id = openStruct.wDeviceID;    setStruct.dwCallback = 0;    setStruct.dwTimeFormat = MCI_FORMAT_FRAMES;    mciSendCommand(m_internal->m_dev_id, MCI_SET, MCI_SET_TIME_FORMAT,                         (DWORD)(LPVOID)&setStruct);    statusStruct.dwCallback = 0;    statusStruct.dwItem = MCI_DGV_STATUS_FRAME_RATE;    mciSendCommand(m_internal->m_dev_id, MCI_STATUS,                         MCI_STATUS_ITEM,                         (DWORD)(LPVOID)&statusStruct);    m_frameRate = ((double)statusStruct.dwReturn) / 1000;    statusStruct.dwItem = MCI_DGV_STATUS_BITSPERSAMPLE;    mciSendCommand(m_internal->m_dev_id, MCI_STATUS, MCI_STATUS_ITEM,                         (DWORD)(LPVOID)&statusStruct);    m_bps = statusStruct.dwReturn;}bool wxVideoWindows::Pause(){    if (m_paused || m_stopped)        return true;    m_paused = true;    return (mciSendCommand(m_internal->m_dev_id, MCI_PAUSE, MCI_WAIT, 0) == 0);}bool wxVideoWindows::Resume(){    if (!m_paused || m_stopped)        return true;    m_paused = false;    return (mciSendCommand(m_internal->m_dev_id, MCI_RESUME, 0, 0) == 0);}bool wxVideoWindows::IsPaused() const{    return m_paused;}bool wxVideoWindows::IsStopped() const{    return m_stopped;}bool wxVideoWindows::GetSize(wxSize& size) const{    size.SetWidth(200);    size.SetHeight(200);    return true;}bool wxVideoWindows::SetSize(wxSize WXUNUSED(size)){    return true;}bool wxVideoWindows::IsCapable(wxVideoType v_type) const{    return (v_type == wxVIDEO_MSAVI);}bool wxVideoWindows::AttachOutput(wxWindow& output){    MCI_DGV_WINDOW_PARMS win_struct;        if (!wxVideoBaseDriver::AttachOutput(output))        return false;        win_struct.hWnd = (HWND)output.GetHWND();    mciSendCommand(m_internal->m_dev_id, MCI_WINDOW,           MCI_DGV_WINDOW_HWND, (DWORD)(LPVOID)&win_struct);    return true;}void wxVideoWindows::DetachOutput(){    MCI_DGV_WINDOW_PARMS win_struct;    wxVideoBaseDriver::DetachOutput();        win_struct.hWnd = 0;    mciSendCommand(m_internal->m_dev_id, MCI_WINDOW,           MCI_DGV_WINDOW_HWND, (DWORD)(LPVOID)&win_struct);}bool wxVideoWindows::Play(){    if (!m_stopped)        return false;    m_stopped = false;    return (mciSendCommand(m_internal->m_dev_id, MCI_PLAY, 0, NULL) == 0);}bool wxVideoWindows::Stop(){    MCI_SEEK_PARMS seekStruct;    if (m_stopped)        return false;    m_stopped = true;    if (::mciSendCommand(m_internal->m_dev_id, MCI_STOP, MCI_WAIT, NULL) != 0)      return false;    seekStruct.dwCallback = 0;    seekStruct.dwTo = 0;    return (::mciSendCommand(m_internal->m_dev_id, MCI_SEEK, MCI_SEEK_TO_START|MCI_WAIT, (DWORD)(LPVOID)&seekStruct) == 0);}// TODO TODO// I hate windows :-(. The doc says MCI_STATUS should return all info I want but when I call it// it returns to me with an UNSUPPORTED_FUNCTION error. I will have to do all by myself. Grrrr !wxString wxVideoWindows::GetMovieCodec() const{    return wxT("No info");}wxString wxVideoWindows::GetAudioCodec() const{    return wxT("No info");}wxUint32 wxVideoWindows::GetSampleRate() const{    return 22500;}wxUint8 wxVideoWindows::GetChannels() const{    return 1;}wxUint8 wxVideoWindows::GetBPS() const{    return m_bps;}double wxVideoWindows::GetFrameRate() const{    return m_frameRate;}wxUint32 wxVideoWindows::GetNbFrames() const{    return 0;}#endif   // __WINDOWS__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -