www.pudn.com > AVI播放器―MediaPlayer控件.zip > main.cpp


//--------------------------------------------------------------------------- 
 
#include  
#include  
#include  
#pragma hdrstop 
 
#include "main.h" 
//--------------------------------------------------------------------------- 
#pragma package(smart_init) 
#pragma resource "*.dfm" 
TForm1 *Form1; 
//--------------------------------------------------------------------------- 
__fastcall TForm1::TForm1(TComponent* Owner) 
        : TForm(Owner) 
{ 
} 
//--------------------------------------------------------------------------- 
 
void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
        OpenDialog1->Filter = "视频文件(*.avi)|*.avi"; 
        if(!OpenDialog1->Execute()) 
                return; 
        AnsiString filename = OpenDialog1->FileName; 
        //专用于视音频的参数 
        MCI_DGV_OPEN_PARMS    mciOpen; 
        mciOpen.lpstrElementName = filename.c_str();  //设置文件名 
        mciOpen.dwStyle = WS_CHILD; 
        mciOpen.hWndParent = Handle;                   //设置父窗口句柄 
        //根据文件的后缀名打开视频设备 
        if (mciSendCommand(0, MCI_OPEN, 
        (DWORD)(MCI_OPEN_ELEMENT|MCI_DGV_OPEN_PARENT), (DWORD)(LPSTR)&mciOpen)!= 0) 
        { 
                //显示错误信息 
                ShowMCIError(); 
                mciSendCommand(devID, MCI_CLOSE, 0, NULL); 
                return; 
        } 
        Button1->Enabled = false; 
        devID = mciOpen.wDeviceID;  //保存设备号 
        MCI_DGV_RECT_PARMS mciRect; 
        //获得AVI剪辑的窗口大小 
        if(mciSendCommand(devID, MCI_WHERE, MCI_DGV_WHERE_SOURCE, 
                        (DWORD)(LPSTR)&mciRect) != 0) 
        { 
                ShowMCIError(); 
                mciSendCommand(devID, MCI_CLOSE, 0, NULL); 
                return; 
        } 
        //创建播放窗口 
        child = new TPlayWindow(this); 
        child->ClientWidth = abs(mciRect.rc.right - mciRect.rc.left); 
        child->ClientHeight = abs(mciRect.rc.bottom - mciRect.rc.top); 
        playwnd = child->Handle;   
        if (playwnd) 
        { 
                //设置为播放窗口 
                MCI_DGV_WINDOW_PARMS mciWindow; 
                mciWindow.hWnd = playwnd; 
                mciSendCommand(devID, MCI_WINDOW, MCI_DGV_WINDOW_HWND, 
                        (DWORD)(LPSTR)&mciWindow); 
                child->Show(); 
        } 
        MCI_DGV_PLAY_PARMS mciPlay; 
        mciPlay.dwCallback = (DWORD)Handle; 
        if(mciSendCommand(devID, MCI_PLAY, MCI_NOTIFY, 
       (DWORD)(LPVOID)&mciPlay) != 0) 
       { 
                ShowMCIError(); 
                mciSendCommand(devID, MCI_CLOSE, 0, NULL); 
                return; 
       } 
} 
//--------------------------------------------------------------------------- 
void TForm1::ShowMCIError() 
{ 
        char szErrorBuf[MAXERRORLENGTH]; 
        DWORD dwError; 
        MessageBeep(MB_ICONEXCLAMATION); 
        if(mciGetErrorString(dwError, (LPSTR) szErrorBuf, MAXERRORLENGTH)) 
        { 
                ShowMessage(szErrorBuf); 
        } 
        else 
        { 
                ShowMessage("Unknown Error"); 
        } 
} 
//--------------------------------------------------------------------------- 
void __fastcall TForm1::OnMCINotify(TMessage &msg) 
{ 
        mciSendCommand(devID, MCI_CLOSE, 0, NULL); 
        delete child; 
        Button1->Enabled = true; 
}