
| 出版日期:2001-01-08 总期号:988 本年期号:03 |
|
编程闯年关(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盘,太夸张了,有没有搞错! |
|||||||||||||||||