ccidnet????

出版日期:2001-01-08 总期号:988 本年期号:03

本期导读
要闻综合
电脑工作室
渠道与市场
产品与应用
软件与服务
InfoCD
编程闯年关(1)
自制MP3播放器
紫瑗 姚永忠

  “小荣,又玩游戏!又玩游戏!看看你今年的成绩,还让我们给你买电脑,说是用来编程,可买来了却整天打游戏。我们怎么说,你都屡教不改,你啊,今年甭想拿压岁钱了,明天我就把电脑搬我屋里,以后不让你再碰电脑了。”

  在老妈的抱怨声中,我不情愿地退出了Diablo II,呆呆地望着Windows桌面,想想今后没有压岁钱,没有电脑的日子,想想再也不能和网上那些要好的GG和MM聊天,不由得“一声叹息”!

  我这种新生代的人,没有电脑哪行啊!为了电脑、为了压岁钱,我一定要说服老妈,怎么说服?笨,这还用问,编个小应用程序给她看看不就得了!老妈平时爱听音乐,对,就编个MP3播放器吧!什么?你也想学,那就跟我来吧!


  ■获得并注册ActiveX控件


  我祭起心爱的小猫,风驰电掣般来到VC知识库网站(www.VCKbase.com),Down下了Mp3play.ocx控件,心想已经成功一半了,不由得狂笑两声。问我下载控件有什么用?我faint!这可说来话长,要从微软的ActiveX技术谈起,具体的自己查资料去吧。

  先把下载获得的控件拷贝到Windows\system目录下,使用Windows自带的控件注册程序Regsvr32.exe进行注册,具体格式如下:

  Regsvr32 Mp3Play.ocx

  注册成功系统会弹出一个信息框,此时就可在可视化编程工具上使用该控件了。


  ■编写ActiveX程序


  启动VC++6.0的AppWizard,创建一个基于对话框的工程,有ActiveX支持特性,命名为“Heaven Sound”。右击主对话框资源,在弹出的选单中选择“Insert Acitve Control”,选择“Dialog-Medien Mp3Play Control”。将插入的Mp3Play控件的“Visible”属性去掉,并为MP3控件生成一个新类。接下来修改主对话框程序的主要代码如下:

  //在主对话框类的头文件HeavenSoundDlg.h上有如下的变量定义

  CFileDialog FileDlg;

  CString FileName;

  //要播放的MP3的文件名

  //{{AFX_DATA(CHeavenSoundDlg)

  //DDX/DDV支持

  enum { IDD = IDD_HEAVENSOUND_DIALOG };

  CStatic m_Time;

  //歌曲的时间长度

   CStatic m_Fre;

  //歌曲的采样频率

  CStatic m_BitRate;

  //歌曲的位率

  CEdit m_SongName;

  //歌曲的文件名

  CMp3Play m_Mp3PlayCtrl;

  //MP3播放控件

  //}}AFX_DATA

  主对话框类的实现文件HeavenSoundDlg.CPP的部分代码如下:

  void CHeavenSoundDlg::OnBrowse()

  {

  //主对话框上的浏览按钮的响应函数

  FileDlg=new CFileDialog(TRUE);

  //变量

  FileDlg->m_ofn.lpstrFilter="MP3 文件(*.MP3)\0*.MP3\0";

  FileDlg->DoModal();

  //打开一个文件对话框,让用户选择

  FileName=FileDlg->GetPathName();

  //取MP3文件全名

  m_SongName.SetWindowText(FileDlg->GetFileTitle());

  //取得MP3本名

   m_Mp3PlayCtrl.Authorize("Alexandrite","176318");

   long Result=m_Mp3PlayCtrl.Open(FileName,NULL);

  //打开MP3文件

  if(Result)

  return;

  int TimeMinute=m_Mp3PlayCtrl.GetTotalTime()/1000/60;

  //取得MP3歌曲的分时长

  int TimeSecond=m_Mp3PlayCtrl.GetTotalTime()/1000%60;

  //取得MP3歌曲的秒时长

  char buffer[20];

  itoa(TimeMinute,buffer,10);

  CString TimeText;

  TimeText=buffer;

  TimeText+=":";

  itoa(TimeSecond,buffer,10);

  TimeText+=buffer;

  m_Time.SetWindowText(TimeText);

  //在时长框上显示歌曲的时长

  long BitRate=m_Mp3PlayCtrl.GetBitRate(); //取得MP3歌曲的位率

  itoa(BitRate,buffer,10);

  m_BitRate.SetWindowText(buffer);

  //在位率框上显示歌曲的位率

  long Fre=m_Mp3PlayCtrl.GetSampleFrequency();

  //取得MP3歌曲的采样频率

  itoa(Fre,buffer,10);

  m_Fre.SetWindowText(buffer);

  //在频率框上显示歌曲的采样频率

  delete FileDlg;

  FileDlg=NULL;

  }

  void CHeavenSoundDlg::OnPlay()

  //主对话框上的播放按钮的响应函数

  {

   m_Mp3PlayCtrl.Play();

  //播放所选择的MP3歌曲

  }

  void CHeavenSoundDlg::OnStop()

  //主对话框上的停止按钮的响应函数

  {

  m_Mp3PlayCtrl.Stop();

  //停止播放当前的MP3歌曲

  m_Mp3PlayCtrl.Close();

  }

  好了,到这里编程部分我已经完全实现,最后,再经过编译连接,就得到一个自制的MP3播放器了。

  

  “妈,您快来歇会儿,听会儿音乐,程序是我编的!怎么样?”,“嗯!还不错,就是程序不太好看。”,“您说的是界面吧!这可要费不少时间,而且这个程序还有很多功能需要完善。所以,电脑……”。

  功夫没白费,哈哈!现在我又可以玩电脑了,什么?你没钱上网,没时间编程。不会吧!算了,我送佛送西天,控件、源代码、可执行程序都放在今年第一期InfoCD光盘上了,自己去找吧。还问我要MP3盘,太夸张了,有没有搞错!