资源描述
学 号:
课 程 设 计
课程名称
可视化编程(VC)
学 院
计算机科学与技术学院
专 业
软件工程专业
班 级
姓 名
指导教师
2012——2013学年 第2学期
目录
引言....................................................................................................................................................1
1.设计要求描述.................................................................................................................................1
2.基本操作及功能说明 ....................................................................................................................1
2.1基本操作 ............................................................................................................................1
2.3功能说明 ............................................................................................................................1
3.软件各功能模块介绍 ....................................................................................................................2
4.软件各功能模块说明 ....................................................................................................................3
4.1“播放/暂停”功能实现 ....................................................................................................3
4.2“快退”功能实现...................................................................................................................4
4.3“快进”功能实现..................................................................................................................4
4.4“上一首”功能实现...............................................................................................................4
4.5“下一首”功能实现...............................................................................................................4
4.6“停止”功能实现..................................................................................................................5
4.7“音量/静音”功能实现 ....................................................................................................5
4.8“全屏”功能实现................................................................................................................5
4.9“(音量)+”功能实现 ....................................................................................................5
4.10“音量调节”功能实现 ....................................................................................................6
4.11“(音量)-”功能实现 ....................................................................................................6
4.12“关于”功能实现.............................................................................................................6
4.13“退出”功能实现 ............................................................................................................6
4.14“顺序,随机,单曲播放”功能实现 ............................................................................7
4.15“清空列表”功能实现 ....................................................................................................8
4.16“从列表移除”功能实现....................................................................................................8
4.17“添加文件”功能实现 ....................................................................................................8
4.18“保存列表”功能实现 ....................................................................................................9
5.运行界面.........................................................................................................................................9
6.问题及解决方案 ..........................................................................................................................10
7.个人体会.......................................................................................................................................11
8.参考文献.......................................................................................................................................12
引言
在个人计算机流行的今天,多媒体播放软件已成为几乎每台个人计算机必备的软件之一,人们在闲暇时可以用多媒体播放软件播放视频音乐来达到娱乐的作用。如今比较流行的播放软件有百度影音、快播、迅雷播放器等,这些播放器都支持大多数格式的视频音频文件,虽然他们实现的功能大同小异,但每款播放软件都有自己独特的风格。用户通过体验各种不同的播放软件进行对比来找到一款适合自己的播放软件。
VC++6.0拥有强大的功能,通过用VC++6.0软件可以编写各式各样的应用程序,该课程设计就是利用VC++6.0来编写播放器软件,可以播放*.mp3、*.wma、*.mdi、*.wav、*avi、*dat、*rmvb、*mp4等格式的音频视频文件。
1.设计要求描述
1.1制作一个具有自己设计风格的媒体播放器。
1.2要求能随机选取要播放的文件,实现前进,回退,暂停,循环播放,音量大小调节等基本功能。
1.3要求能播放多种格式(至少三种以上)的音频视频格式文件。
1.4可以实现其它附加功能
1.5界面良好,功能完善
2.基本操作及功能说明
2.1基本操作
该播放器具有播放、暂停、快退、快进、停止、静音、音量调节、全屏等
基本功能,同时还具有自制的播放列表,可以按照列表上的顺序进行上一首、下一首的播放,对列表可以进行添加文件、保存列表、清空列表、从列表移除等操作,并且设定了播放模式,包括顺序播放、随机播放、单曲播放三个播放模式可以选择。
2.3功能说明
该播放器使用了Windows Media Player控件和各种类型按钮,以及一个列表框和滚动条控件,并由Windows Media Player对多媒体文件进行解码和播放。
由于Windows Media Player的特点,首先要在初始化中对CWMPControls,CWMPSettings等十七个类的对象进行绑定与关联。对Windows Media Player的操作有播放、暂停、快退、快进、停止、静音、音量调节、音量增加减小、全屏,这些功能的实现主要是通过调用CWMPControls,CWMPSettings和CWMPPlayer4类中的成员函数来实现的。对于播放列表框的操作,添加文件是运用listbox中的AddString函数把文件添到播放列表里,在由CWMPPlayer4类中的成员函数加载文件进行播放;保存列表是新创建一个名为list的txt文本文件,再将列表框的内容逐个写到该文本文件里;清空列表操作是调用listbox类的ResetContent函数将列表框的内容清除,并随即调用保存的函数使list文件中的内容也清空;从列表移除是将光标当前选定的位置在列表框中删除。至于播放模式的选择是运用的ontimer函数和settimer函数来控制播放模式。
3.软件各功能模块介绍
首先是添加文件,将文件添加到播放列表,再列表框里双击文件,此时文件开始播放,然后可进行播放、暂停、快退、快进、停止、静音、音量调节、全屏、上一首、下一首、顺序播放、随即播放、单曲播放等操作,对于音量的调节可通过滑动音量滑块条和点击增大减小按钮。
该播放软件中控件关联的变量,控件ID如下表所示。
控件Caption
控件ID
关联变量类型
关联变量名
WMPlayer
IDC_OCX1
CWMPlayer4
m_Player
ListBox
IDC_LIST1
CListBox
m_list
Button
IDC_PAP
CButton
m_playpause
SLIDER
IDC_SLIDET1
CSliderCtrl
m_pSlide
Button
IDC_VOICE
CButton
m_voice
表1
控件ID及关联的消息响应函数
功能
控件ID
消息响应函数
播放/暂停
IDC_PAP
OnPap()
快退
IDC_FASTREVERSE
OnFastreverse()
快进
IDC_FASTFORWARD
OnFastforward()
上一首
IDC_BUTTONPRE
OnButtonpre()
下一首
IDC_BUTTONNEXT
OnButtonnext()
停止
IDC_STOP
OnStop()
音量/静音
IDC_VOICE
OnVoice()
全屏
IDC_FULLSCREEM
OnFullscreem()
(音量)+
IDC_DECVOI
OnDecvoi()
(音量)-
IDC_INCVOI
OnIncvoi()
关于
IDC_ABOUT
OnAbout()
退出
IDC_EXIT
OnExit()
顺序播放
OnRadio1
OnTimer()
随机播放
OnRadio2
OnTimer()
单曲播放
OnRadio3
OnTimer()
清空列表
IDC_CLEAN
OnClean()
从列表移除
IDC_REMOVE
OnRemove()
添加文件
IDC_ADD
OnAdd()
保存列表
IDC_SAVE
OnSave()
表2
表1和表2所列出的是对应控件的对象的关联,此外还需要有一个CString类型的变量名来保存文件的路径及文件名。
类名
对象名
CSting
m_FilePathName
除了对各个控件关联变量以及消息响应函数,还要对对话框类进行消息响应函数的关联,还需要用到WM_TIMER消息响应函数以及SetTimer()和KillTimer()函数,控制将对话框类进行该消息响应函数的关联并书写。
4.软件各功能模块说明
4.1“播放/暂停”功能实现
void CPlayerofEasonDlg::OnPap()
{
CString str;
m_playpause.GetWindowText(str);
if(str=="播放")
{
m_playpause.SetWindowText("已暂停");
m_Player.GetControls().pause();
}
else
{
m_playpause.SetWindowText("播放");
m_Player.GetControls().play();
}
}
4.2“快退”功能实现
void CPlayerofEasonDlg::OnFastreverse()
{
m_Player.GetControls().fastReverse();
}
4.3“快进”功能实现
void CPlayerofEasonDlg::OnFastforward()
{
m_Player.GetControls().fastForward();
}
4.4“上一首”功能实现
void CPlayerofEasonDlg::OnButtonpre()
{
CString str;
int index=m_list.GetCurSel()-1;//光标减一
if(index<0)
index=m_list.GetCount()-1;//如果播放完第一曲就自动播放最后一首
m_list.GetText(index,str);//获得当前光标所指的路径字符串
m_Player.SetUrl(str);//开始播放上一首
m_list.SetCurSel(index);//自动置光标
4.5“下一首”功能实现
void CPlayerofEasonDlg::OnButtonnext()
{
CString str;
int index=m_list.GetCurSel()+1;//光标加一
if(index>=m_list.GetCount())
index=0;//如果播放完最后一曲就自动播放第一首
m_list.GetText(index,str);//获得当前光标所指的路径字符串
m_Player.SetUrl(str); //开始播放下一首
m_list.SetCurSel(index);//自动置光标
}
4.6“停止”功能实现
void CPlayerofEasonDlg::OnStop()
{
m_Player.GetControls().stop ();
}
4.7“音量/静音”功能实现
void CPlayerofEasonDlg::OnVoice()
{
m_voice.SetWindowText("已静音");
m_Player.GetSettings().SetVolume(0);
m_pSlide.SetPos(0);
}
4.8“全屏”功能实现
void CPlayerofEasonDlg::OnFullscreem()
{
long Playstate=m_Player.GetPlayState ();
if(!Playstate)
{
MessageBox("请先加载视频O.O",NULL,MB_OK);
}
else
{
m_Player.SetFullScreen (true);
SetFocus();
}
}
4.9“(音量)+”功能实现
void CPlayerofEasonDlg::OnIncvoi()
{
m_Player.GetSettings().SetVolume(m_Player.GetSettings().GetVolume()+10);
m_pSlide.SetPos(m_pSlide.GetPos()+10);
if(m_pSlide.GetPos()>0)
m_voice.SetWindowText("音量");
}
4.10“音量调节”功能实现
void CPlayerofEasonDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if(pScrollBar->GetDlgCtrlID()==IDC_SLIDER1)
{
CSliderCtrl*pSlide=(CSliderCtrl*)pScrollBar;
m_Player.GetSettings().SetVolume(pSlide->GetPos());
}
if(m_pSlide.GetPos()>0)
m_voice.SetWindowText("音量");
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
4.11“(音量)-”功能实现
void CPlayerofEasonDlg::OnDecvoi()
{
// TODO: Add your control notification handler code here
m_Player.GetSettings().SetVolume(m_Player.GetSettings().GetVolume()-10);
m_pSlide.SetPos(m_pSlide.GetPos()-10);
}
4.12“关于”功能实现
void CPlayerofEasonDlg::OnAbout()
{
// TODO: Add your control notification handler code here
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
4.13“退出”功能实现
void CPlayerofEasonDlg::OnExit()
{
int check=AfxMessageBox("确认要退出吗?",MB_OKCANCEL);
if(check==IDOK)
{
CDialog::OnCancel();//点击确定则退出
KillTimer(1);
}
else
{
return; //取消退出
}
}
4.14“顺序,随机,单曲播放”功能实现
void CPlayerofEasonDlg::OnTimer(UINT nIDEvent)
{
int index=m_Player.GetPlayState();//获取播放状态
if(index==1)//如果播放完成
{
if(((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck())//如果是顺序播放
{
CString str;
int index=m_list.GetCurSel()+1;
if(index>=m_list.GetCount())
index=0;//如果播放完最后一曲就自动播放第一首
m_list.GetText(index,str);
m_Player.SetUrl(str);
m_list.SetCurSel(index);//自动置光标
}//顺序播放
if(((CButton *)GetDlgItem(IDC_RADIO2))->GetCheck())//随机播放
{
srand(time(0));//目的在于每次都能产生不同的随机数序列
m_list.SetCurSel(rand()%m_list.GetCount());//随机选择0-m_list.GetCount()-1的任意一个数即随即选择m_list里的文件
m_list.GetText(m_list.GetCurSel(),m_FilePathName);
m_Player.SetUrl(m_FilePathName);
}
if(((CButton *)GetDlgItem(IDC_RADIO3))->GetCheck())//单曲循环
{
m_list.GetText(m_list.GetCurSel(),m_FilePathName);
m_Player.SetUrl(m_FilePathName);
}
}
CDialog::OnTimer(nIDEvent);
}
4.15“清空列表”功能实现
void CPlayerofEasonDlg::OnClean()
{
CStdioFile file;
m_list.ResetContent();//删除列表
file.Open(".\\list.txt",CFile::modeCreate);
}
4.16“从列表移除”功能实现
void CPlayerofEasonDlg::OnRemove()
{
m_list.DeleteString(m_list.GetCurSel());//删除当前光标所选择的行
OnSave();//自动保存删除某一行后的播放列表
}
4.17“添加文件”功能实现
void CPlayerofEasonDlg::OnAdd()
{
Char szFileFilter[]="音频文件(*.mp3;*wav;*.mp4;*.rmvb;*.avi;*.mpeg;*.dat;*.mpga;*.mov;*.3gp;*.wma)|*.mp3;*wav;*.mp4;*.rmvb;*.avi;*.mpeg;*.dat;*.mpga;*.mov;*.3gp;*.wma||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR,szFileFilter);
if(dlg.DoModal())
{
POSITION pos=dlg.GetStartPosition();
while(pos!=NULL)
{
m_FilePathName=dlg.GetNextPathName(pos);//得到完整的文件名,包括目录名和扩展名
m_list.AddString(m_FilePathName);//增加到播放列表
}
}
}
4.18“保存列表”功能实现
void CPlayerofEasonDlg::OnSave()
{
CStdioFile file;
file.Open(".\\list.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::typeText);//打开指定文件
for(int i=0;i<m_list.GetCount();i++)
{
CString strtemp;
m_list.GetText(i,strtemp);
strtemp+="\n";
file.WriteString(strtemp);//保存播放列表
}
}
5.运行界面
6.问题及解决方案
6.1首次编译连接运行成功,但单独把.exe文件拉出来运行时出现问题,程序不能运行,弹出错误框
原因:在对话框初始化的函数里,即BOOL CPlayerofEasonDlg::OnInitDialog()函数里打开文件列表的语句:file.Open(".\\list.txt",CFile::modeReadWrite|CFile::typeText);,注意,此处为可读写的TXT文件,若Debug里事先没有list.txt的文件则不能创建。这会导致播放列表不能加载,有人也许会问,加上CFile::modeCreate不就行了。经尝试后,程序初始时运行file.Open(".\\list.txt",CFile::modeReadWrite|CFile::typeText|CFile::modeCreate);不管之前在运行播放器时有没有点了保存按钮列表,加载后列表框始终为空。查看MSDN后发现modeCreate意思是如果没有就创建,如果有则清零,为满足功能需要,故这里不加CFile::modeCreate。所以在有.exe的文件当前目录下一定要有.list文件,否则就会如上图报错。
解决方案:在有.exe的文件当前目录下自己创建.list文件
6.2起初运行成功后需要对软件作美化,于是就想到加载皮肤。在VC编译后直接点执行,可运行成功,但在Debug下点击.exe文件后就报错。
原因:在编译后,VC直接找工程区的根目录,我把报错框中所需要的文件放在了该工程区的根目录下,如果在Debug下直接点.exe文件运行时,.exe文件会在其当前目录下找,这样就使得找不到所需要的文件而报错。
解决方案:在Debug文件夹里加上所需要的文件
6.3播放器大体完成后需修改图标,不知怎么将一个图片格式的文件转换为.ico文件并加载。
解决方案:经上网查阅后,下载了一个格式转换文件,可以直接将图片转.ico文件。在ResourceView里找到Icon文件夹,删除原有的图标文件,并引入.ico文件,再在属性中把ID改为刚才删除的图标的ID即可。
7.个人体会
通过这次课程设计实践我受益匪浅! 这次课设使我更加清晰的了解了编程思想和编程技巧,也认识到了各函数的生命周期及对控件添加消息响应,什么时候该给控件添加成员变量,什么时候加成员变量是多于的。一个MFC软件的编写包括构思、设计、编写、调试等过程,当然,软件及编程的风格也很重要。MFC程序设计是一门重要的专业基础课程。它与数据结构,操作系统,数据库原理和软件工程等课程相互连通,通过对MFC中类直接关系的分析可以对之前学的C++语言有更清楚的认识,学号了一些其他课程对编写出一个好的应用程序也是至关重要的。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,经过对本次课程设计制作的全过程,使我对MFC有了更进一步的认识和了解。在不长的时间里我明白了,不仅仅是要重视,而且要通过不断的上机实验才能更好地学习这门语言。在课程设计的过程中,我认识到我有很多不足得地方。首先是自己在敲代码的速度上还有待提高,经常按错字母,但比起刚进入大学时还得看键盘找按键来,已经有了很大的提高;再有对MFC的一些标准库函数不太了解,对函数调用的正确使用不够熟悉,还有对MFC中经常出现的错误也不了解。通过设计实践,使我在这几个方面的认识有所提高。经过设计的各个环节,从中学到了很多,锻炼了自己系统的设计的能力,从系统的需求到系统的功能,到系统的测试,到系统的优化,有一个清晰的思路,这样对我们以后在工作中或学习中得到很好的锻炼,为用VC++编辑软件奠定基础。当然,本报告所采取的解决问题的方法并不是非常完善的,在今后的学习、工作中,将继续研究并改进。
对于MFC程序模块的不熟悉是课程设计中所遇到的大的问题。 MFC中有基于基本对话框,单文档,多重文档等模块,对一些模块的偏向导致对于所有的模块都是似懂非懂,并且在编写程序的时候相互混淆导致编写错误。 程序基础的不扎实使得课程设计不够完美,编程效率低下,耗时较长。 以前对程序只是看在眼里,动手的时间并不多,这次程序设计对自己的程序设计实践能力发出了巨大的挑战,通过对程序的设计发现在自己以前的基础功不扎实,导致许多代码都打错,大小写不分。自己对MFC程序中的各种函数以及各个函数之间的相互调用还不能很好的掌握,不知道程序接口的函数以及参数值,只能查询资料慢慢理解。
经过本次课程设计后,从各方面证实了我的各种能力都有待提高,但这次课程设计也给了我成功的果实,使用对可视化编程这门课产生了极大的兴趣,相信在今后的日子里我会不断进步,从一个菜鸟最终变为一个大神。
8.参考文献
【1】 詹红霞 侯思颖 陶永红等编著 Visual c++程序设计教程 清华大学出版
社
【2】 王育坚编著 Visual c++面向对象编程教程第二版 清华大学出版社
本科课程论文评分标准
班级
学号
姓名
论文题目
多媒体播放器系统实现
评阅点
评分标准(细则)
分值
给分
功能及算法
(40分)
正确实现本程序所需全部功能,算法设计正确合理且有一定创意
40分
实现所需功能,算法正确
30分
基本实现所需功能
15分
有明显重大错误
5分
无法实现程序功能
0分
界面和操作性
(20分)
界面美观、合理,可操作性强
20分
界面合理,可操作
15分
界面尚可,基本可操作
10分
可操作较差
5分
程序可读、可维护性
(15分)
程序可读性好、逻辑清晰,程序完整,可维护性好,
15分
程序可读、可维护
10分
基本可读可维护
5分
逻辑混乱、不可读
0分
论文质量
(25分)
论文规范,行文流畅,层次清晰
25分
论文书写基本规范,文理较通畅
20分
结构较合理,层次较清楚,基本符合要求
15分
结构混乱,文不对题目,或者有明显抄袭现象
5分
总分
教师签名:
12
展开阅读全文