Chinaunix首页 | 论坛 | 博客
  • 博客访问: 264685
  • 博文数量: 49
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 540
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-08 10:33
文章分类

全部博文(49)

文章存档

2010年(2)

2009年(30)

2008年(17)

我的朋友

分类: C/C++

2009-06-10 20:57:59

    在实际开发中,需要用到用C++ Builder自动播放VCD、DVD的功能,上网搜了半天,C++ Builder关于这方面的实在是太少了,不过VB的倒很多,看了一下VB的。按照它的思路来,碰了“一鼻子灰”。VB和C++ Builder在这方面还是有些区别的。言归正传,要实现这个功能,我们用Windows Media Player,需要安装Windows Media Player插件,直接在C++ Builder中,选择 Component -> Inport Active control  -> Windows Media Player(version 1.0),之后选择Install就行了。这样安装完之后,就可以在 ActiveX控件中发现多了一个 Windows Media Player控件。
   若想能播放VCD、DVD的功能,则必须在PC机上的WindowsMediaPlayer能正常播放VCD、DVD。一般都是安装一些解码器就行了。对于我用的解码器是ffdshow,用WindowsMediaPlayer播放VCD、DVD基本上是没有问题的。但在具体的安装过程中,也碰到了一些问题,我的显卡芯片是NVIDIA Quadro NVS 135M,由于驱动程序安装的是买电脑时关盘自带的,对MPEG2解码支持不好,所以安装完解码器之后,插入DVD,WindowsMediaPlayer只能听见声音,却不见图像。在网上下载一个最新的显卡驱动程序,就OK啦。
   在新建的窗体上放置一个Windows Media Player控件,并把它的属性 Name 改为WMPlayer,再加一个ComboBox,用来列出CDROM的去驱动器盘号。下面是程序实现。
Windows Media Player的属性有很多,网上介绍其常用的属性的也不少,我在这儿也就不作介绍了。
程序代码:
 
#include
#pragma hdrstop
#include "Media.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "WMPLib_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
IWMPPlaylist *pl;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormShow(TObject *Sender)
{
  FindCdrom();
  FindList();
}
//---------------------------------------------------------------------------
void TForm1::FindCdrom(void)
{
  int iNumDrive = 0;
  int i = 0;
  iNumDrive = WMPlayer->cdromCollection->count;
  if(iNumDrive == 0)
  {
     Application->MessageBoxA("There is NO DVD or VCD drive","´íÎó",MB_OK);
  }
  for(i = 0;i < iNumDrive; i++)
  {
     ComboBox1->AddItem(WMPlayer->cdromCollection->Item(i)->driveSpecifier,NULL);
  }
}
void TForm1::MediaPlay(void)
{
  int iNumDrive;
  int i = 0;

  pl = WMPlayer->cdromCollection->Item(0)->Playlist;//若只有一个驱动器则使用Item(0).
   for(i=0;icount;i++)
   {
     WMPlayer->currentPlaylist->appendItem(pl->get_Item(i));//在当前的播放列表添加
                                                      //播放器的文件
   }
    WMPlayer->controls->play();               //播放VCD文件
}
 
程序说明:IWMPPlaylist *pl这个是定义的一个播放列表,FindCdrom、MediaPlay是自定义的为Form的成员函数,FindCdrom是在组合框里列出CDROM的驱动器的盘符。MediaPlay是自动播放CDROM里的视频文件。
 
阅读(2677) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~