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; }