资源描述
大连理工大学软件学院本科生课程设计报告
《C/C++课程设计》项目报告
目 录
1 项目简介1
1。1项目名称1
1.2功能概述1
1。3 开发人员及职责。。。。.。。。。.。.。。。。.。。.。。。.....。。。。.。..。.。.。。..。...。..。..。。。。.。.。。.。。。。..。.。。。。。。..。。。。.。。。。。。..。。。。.。。...。1
2 需求分析。。。。..。。。。...。。.。。。。。..。。。.。.。。..。.。。。。。.。。..。.。。.。..。...。。...。..。.。。。.。。.。.。..。。。...。。。.。.。。。。。。。。.。。。。。。。.。。。..。.。。.。...。。。。。1
2。1 功能需求..。。。。。。.。。.。。.。..。。。。。。。。。。。。。.。....。。.。。。.。..。.。。.。。。。。。。。。。。.。...。。。。。.。..。...。.。。。..。。.。。。。。。.。..。...。.。...。。。。.1
2。2 性能需求。..。..。。。..。。。.。..。。。.。..。..。.。。。。.。。。。。....。。。.。。。。..。。..。。。.。.。.。。.。.....。.。.。.。。。。。。。.。。.。.。。.。。。。.。..。。。。。。.。。.。2
3 系统设计。。。。.。..。。.。。。。..。。.。。。.。。.。。。。。。。。.....。..。。。.。。。..。。。.。。..。。。.。。.。。。.。....。。..。。。。。。。。。。。。。。..。。。。。。。。。。。。。。。。.。。。。。....。。。..3
3.1 代码设计。。。。.。.....。..。。....。.。。.。。...。。..。。。。。..。....。。。。.。.。。。.。。。。。..。。.。。.。.。。...。。。..。。.。。。。。..。。。。。。。。...。。。。。。。...。。。3
3。2 流程图。。。。.。。。。。.。。..。。..。。。。。。。。.。....。。。。。。。..。..。。。.。。。。。。。。.。。..。.。.。。。。..。。。。。。。。。.。。。。.。。。...。。。。。..。.。。。。。。.。。。。。.。..13
4 系统实现及测试..。.。。。。。。。。..。..。.。。.。。..。.。。....。。..。..。.。.。。.。。.。.。.。。..。。。..。。。..。.。。。。。.。。。..。。。.。..。。。。。。..。。。.。。.。。.。。。..。17
5 项目总结..。.。。...。。.。.。。。。.。。。.。.。。。。。。。。。。。。。.。。..。。。。。.。.。。。。。.。..。。。..。。。.。。。。。..。.。。。。.。。。...。.。。.....。.。......。。。.。。。.。....。..。.20
5。1 总体总结.。。。。.。.。。。。..。..。。。..。。.。.。.。。..。。。。..。..。.。.。。。.。。。。。。......。.。。..。。。....。。。。.......。。。。。。...。。。。。。.。。。....。。.。.20
5。2 个人总结..。。。.。。.。.。。。.。..。。。。。.。。。。。..。。.。.。.....。.。.。.。。。。。。.。.。。。.。...。.。。。。.。。..。。。。。.。。。.。...。。。.。。.。。.。.。。。.。。。..。。。21
大连理工大学软件学院本科生课程设计报告
1 项目简介
1.1 项目名称
多媒体播放器
1.2 功能概述
此款媒体播放器项目具有以下功能:
(1)本地设定目录中包含音频文件的浏览和播放(支持mp3格式)。
(2)本地设定目录中包含图片文件的浏览(支持bmp格式)。
(3)本地设定目录中包含视频文件的浏览和播放(支持mp4格式)。
(4)最近播放列表功能,保存最近播放的10个文件,保存最近追加的10个文件。视频,音频,图片是分开的,都有最近播放列表和最近追加列表。
1。3 开发人员及职责
负责视频模块,以及最后的模块整合,报告的编写
负责音频模块,报告的编写
负责图片模块,报告的编写
2 需求分析
2。1。 功能需求
本设计将要实现的是一个单机多媒体播放器,可以对音频、视频、图片进行查看。从其目标功能及特点分析,将本软件功能划分如下:
(1) 视频播放器:
可以打开MP4格式的视频文件。
在本地文件夹中将MP4格式的视频文件添加至播放列表,点击播放,或双击列表里的所选项目,就可跳转至视频播放窗口。
在播放窗口里,查看视频时,有“播放”,“暂停”,“停止”功能。
播放中,还有“前进”,“后退”功能,即快进快退功能,以4秒为一个单位,这个单位也可以在代码中进行修改。
在观看视频时,还有“上一曲,下一曲”功能,即查看之前添加在播放列表里的视频项。同时,也可以选择播放模式“循环,顺序,随机",该功能也是基于播放列表实现的.
在右边功能键里,还有音量调节,静音功能.除此以外 ,还可以进行全屏浏览,按“ESC"退出全屏.
在主页面,还有两个数据框“最近追加项目”和“最近播放项目”,可以直观地看到最近播放项目,且可以手动清空所有项目。这两个列表只按照时间,保存最近的项目,且最多保存10个.
(2) 音频播放器
可以打开MP3格式的音频。
在本地文件夹中将MP3格式的视频文件添加至播放列表,点击播放,或双击列表里的所选项目,就可跳转至音频播放窗口。并且,在主窗口,还有两个数据框“最近追加项目”和“最近播放项目”,可以直观地看到最近播放项目,且可以手动清空所有项目。这两个列表只按照时间,保存最近的项目,且最多保存10个。
(此处为该多媒体公共窗口,功能相同,下面的图片浏览器也是一样的.)
在播放窗口里,听取音频时,有“播放”,“暂停”,“停止”功能。
同样也会有“前进,后退"功能,“上一曲,下一曲"功能,播放模式中的“循环,顺序,随机",这些功能与上面所述的视频播放器相同。
(3) 图片浏览器
可以打开BMP格式的图片。
主窗口同视频、音频播放器一样,在此不多赘述.
在浏览图片窗口中,会有“上一张,下一张”功能键,可以在“播放列表,最近播放项目,最近追加项目”任何一个列表中循环,可以自由选择。当图片浏览到所选列表的最后一张时,会自动循环至列表第一张.
(4)在主窗口的中,在列表中已添加文件后,有两种方式可以打开文件.一是选中想要打开的文件,点击“播放文件”按钮,二是直接双击列表中的文件,便可进入到相应子窗口进行查看.
(5)当单独拿出exe文件运行时,会自动在exe所在文件里创建9个文本文档,分别存放三个模块(视频,音频,图片)的三个列表(播放列表,最近播放项目,最近追加项目)信息。
2。2. 性能需求
(1)硬件平台要求
由于本软件为单机软件,不需进行大量的数据读写和数据交换,故对系统硬件配置的要求并不高,只要能够平稳运行Windows操作系统的硬件平台,都能够使用本软件.
(2)软件开发环境
1。 OS:Microsoft Windows XP SP2
2。 Complier:Visual C++ 6.0 , Visual Studio 2005 Team System或更高版本
3。 MSDN Library
3 系统设计
3.1。代码设计
(1)音频、视频模块
1。创建播放器对话框
右击Dialog,点击插入,在弹出的对话框中点击Dialog,再点击新建。
双击新建的得对话框的ID,弹出新建的对话框,删除里面所有的控件。
右击,建立类向导,此时弹出Adding a class对话框,点击ok,输入name为player, 点击确定后退出。
再在对话框中右击,选择插入ActiveX控件,选择Windows
Media Player,之后在对话框中可以看到一个视频控件。右击,选择属性,在控制中将选择模式改为None,在视频控件中也就看不到一开就有的按键了。再次右击视频控件,选择建立类向导。点击Member Variables,选择视频控件的ID(默认为ID_OCX1),
点击Add Variables。此时会弹出一个对话框。
点击确定后,弹出Comfirm Class对话框后,点击OK.此时可以看到建立了很多个类。之后为添加成员变量。Name为m_play
,Category为Control,Variable Type为CWMPPlayer4.点击确定之后可以看到下面的效果.
2。控件与函数
声明全局变量CString playname,用于记录播放地址;int ntype用于记录播放的类型;int num1,num2,num1用于记录播放的地址在播放列表中的位置,num2用于记录播放列表中总的播放地址。构建成员函数void player::Onplay(CString pname,int n,int m,int t)
{playname=pname; num1=n;num2=m;ntype=t;}
将前台所选择播放的信息通过函数传递给播放器对话框中
在对话框中放上以下几个控件。
控件
ID
标题
控件
ID
标题
Push Button
ID_bofang
播放
Push Button
ID_zanting
暂停
Push Button
ID_tingzhi
停止
Push Button
ID_qianjing
前进
Push Button
ID_houtui
后退
Push Button
ID_shangyiqu
上一曲
Push Button
ID_xiayiqu
下一曲
Push Button
ID_yinjia
+
Push Button
ID_yinjiang
-
Push Button
ID_jingyin
静音
Push Button
ID_quanping
全屏
Group Box
IDC_static
播放模式
Group
Box
IDC_yinliangkongzhi
音量控制
Radio
Button
IDC_XUNHUAN
循环
Radio
Button
IDC_shunxu
顺序
Radio
Button
IDC_suiji
随机
Text
IDC_static
时间进度
Text
ID_time
Static
Text
IDC_volume
Static
滑块
IDC_SLIDER1
控件排列如下
并建立如下三个变量
添加全局变量int hour, minute, second;
右击对话框,建立类向导,在Messages中选择WM_INITDIALOG,点击ADD Function,再点击Edit Code在BOOL player::OnInitDialog()函数中写入
hour=0;
minute=0;
second=0;
UpdateData(true);
m_time。Format(”%d:%d:%d",hour,minute,second);
UpdateData(false);
让时间进度一开始为0;
同样的方法添加成员函数void player::OnTimer(UINT nIDEvent)
让时间进度能随着播放的音视频的进度而走。
添加成员函数
void player::OnDestroy()
{
KillTimer(0);
CDialog::OnDestroy();
// TODO: Add your message handler code here
}在退出播放器对话框时,让计数器停止。
添加全局变量BOOL qian=false;若qian为true时,表示点击了前进或后退,此时点击播放时,继续播放.双击播放,点击确定,
添加以下成员函数
void player::Onbofang()
{ if(!qian)
{
m_play。SetUrl(playname);
KillTimer(0);
hour=minute=second=0;
UpdateData(true);
m_time.Format("%d:%d:%d”,hour,minute,second);
UpdateData(false);
SetTimer(0,500,NULL);
}
else
{
m_play。GetControls()。play();qian=false;}
}点击播放时,也开始启动计时器
同理,前进的成员函数
void player::Onqianjing()
后退的成员函数
void player::Onhoutui()
停止得成员函数
void player::Ontingzhi()
停止时,时间进度变为0,同时计数器停止.
暂停的成员函数
void player::Onzanting()
{ CString strtemp;
GetDlgItemText(ID_zanting,strtemp);
if (strtemp.Compare("暂停”)==0)
{
m_play.GetControls().pause();
SetDlgItemText(ID_zanting,”继续”);
KillTimer(0);
}
if (strtemp。Compare(”继续")==0)
{m_play.GetControls()。play();
SetDlgItemText(ID_zanting,"暂停”);
SetTimer(0,500,NULL);
}
}
点击暂停时,显示继续,此时计数器停止。当点击继续时,计数器又开始运行,同时显示出暂停。
定义成员变量int shape=2;默认值为2,表示默认顺序播放.在循环,顺序,随机播放函数中,分别将shape赋值为1,2,3;
创建成员函数
void player::shunxubofang()
{
CStdioFile *fsp;
if(ntype==3)
{fsp=new CStdioFile(".\\list.txt”,CFile::modeRead);}
else if(ntype==1)
{fsp=new CStdioFile("。\\list1.txt”,CFile::modeRead);}
else if(ntype==4)
{fsp=new CStdioFile(”。\\list21。txt”,CFile::modeRead);}
else if(ntype==5)
{fsp=new CStdioFile(”。\\list22.txt”,CFile::modeRead);}
else if(ntype==6)
{fsp=new CStdioFile(”.\\list31.txt",CFile::modeRead);}
else if(ntype==7)
{fsp=new CStdioFile(”。\\list32.txt”,CFile::modeRead);}
CString str;
if(num1==0)
{num1=num2;}
for(int i=0;i<=num1-1;i++)
{
fsp—〉ReadString(str);}
playname=str;
fsp—>Close();
delete fsp;
m_play。SetUrl(playname);
num1——;
}
此函数用于上一曲的顺序播放.根据媒体类型与播放列表的不同,而选择打开的文件不同.若选择的是第一曲,上一曲为最后一曲。下一曲的顺序播放函数与上面类似,不过若选中为最后一曲时,则下一曲为第一曲。与上面的函数不同在于
if(num1==num2-1)
{num1=0;}
else
num1++;
for(int i=0;i<=num1;i++)
{
fsp—〉ReadString(str);}
playname=str;
fsp—>Close();
delete fsp;
m_play。SetUrl(playname);
随机播放为在0到总地址数之间随机生成一个数,然后播放次数字所对应的音视屏.与上面的函数不同在于
srand(time(0));
int temp=rand()%num2;
上一曲的函数
oid player::Onxiayiqu()
{
// TODO: Add your control notification handler code here]
if(shape==1)
{ m_play。SetUrl(playname);}
else if(shape==2)
{
shunxubofang();
}
else if(shape==3)
{ suijibofang();}
SetTimer(0,500,NULL);
}
根据shape的不同,所选择的函数也就不同。
在下一曲的函数中,与上面不同的是,当shape为2时,所调用的函数为shunxubofang2();
构建成员函数
void player::nowvolume()
{
UpdateData(true);
m_volume。Format("%d”,m_silder。GetPos());
UpdateData(false);
}使声音滑块所对应的数字呈现在静态文本框中。同时在OnInitDialog()中加入 m_silder。SetRange(0,100);
m_silder.SetPos(50);
nowvolume();
定义滑块的长度为100,刚开始时是50。
音减的函数中void player::Onyinjiang()
{
// TODO: Add your control notification handler code here
long volume=m_play。GetSettings().GetVolume()-10;
m_play。GetSettings()。SetVolume(volume);
m_silder。SetPos(volume);
nowvolume();
}每次点击-,就将声音减10。音加只要将减10改为加10即可.同时在音加函数
中加入SetDlgItemText(IDC_jingyin,"静音”);当处于静音时,点击+,可将“有声”改为“静音"。
同时为音量滑块建立类向导,添加如下函数
void player::OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
m_play。GetSettings()。SetVolume(m_silder。GetPos());
nowvolume();
*pResult = 0;
}
使其能够拖动滑块来改变音量大小。
双击静音后,添加函数
void player::Onjingyin()
{
// TODO: Add your control notification handler code here
CString strtemp;
GetDlgItemText(IDC_jingyin,strtemp);
if (strtemp。Compare(”静音”)==0)
{
m_play。GetSettings()。SetVolume(0);
m_silder。SetPos(0);
SetDlgItemText(IDC_jingyin,"有声”);
}
if (strtemp.Compare("有声")==0)
{
m_play.GetSettings()。SetVolume(30);
m_silder。SetPos(50);
SetDlgItemText(IDC_jingyin,”静音”);
}
nowvolume();
}
当点击静音时,声音变为0,此时文字变为“有声”,当点击“有声"时,声音变为50,此时文字为“静音".
添加全局变量 bool quan=false;当其为true时,为全屏显示,默认为false.
双击全屏,添加成员函数
void player::Onquanping()
{
m_play。SetFullScreen(TRUE);
quan=true;
}此时全屏显示,quan值为true;
右击视频控件,建立类向导,Messages中选择DoubleClick,编辑函数,写入
if(!quan)
{
m_play。SetFullScreen(TRUE);
quan=true;
}
else
{
m_play.SetFullScreen(FALSE);
quan=false;}
}
根据quan的值,双击之后,来决定是全屏还是退出全屏。
(2) 图片模块
新建对话框,建发与视频播放器的相同。在对话框中引入三个控件,一个图像的,ID设为ID_showing,,类型为位图,在样式中选择凹陷,图像居中,真实图像大小。
两个Button,一个为上一张,一个为下一张。建立类向导,方法与播放器相同,类名为photo。构建函数void photo::getname(CString pn,int num1,int num2,int nt)
{
m_path=pn;
now=num1;
sum=num2;
type=nt;
}
将前台数据传给后台全局变量m_path为播放地址,now为播放地址序列,sum为总播放数量,type为播放列表的类型。
创建函数
void photo::showpic()
{
hwnd = GetDlgItem(IDC_showing);
hDesDC = hwnd->GetDC()—〉m_hDC;
hSrcDC = CreateCompatibleDC(hDesDC);
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),m_path,IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
GetObject(hBitmap, sizeof(BITMAP), &bm);
SelectObject(hSrcDC, hBitmap);
hwnd—>GetClientRect(&rect);
::SetStretchBltMode(hDesDC,COLORONCOLOR);
::StretchBlt(hDesDC, rect.left, rect.top, rect。right, rect。bottom, hSrcDC,
0, 0, bm。bmWidth, bm.bmHeight,+SRCCOPY);
UpdateData(false);
}
此函数为将图像在图像控件中显示。
接下来进行在OnPaint()函数中画图。由于此类中没有该函数,可通过建立类向导
(3)主窗口模块
打开VC6++,新建工程.选择MFC AppWizard(exe),在工程名字中填入media1,如图所示
点击确定。选择创建类型为基本对话框。一直点击确定。最后打开对话框,删除里面所有的控件。
右击media1 resources,点击插入,选择新建Meun,打开Meun菜单,新建三个主菜单:应用程序,媒体类型,目录设定.建立次菜单如下图所示
主菜单
次菜单ID
次菜单标明
应用程序
ID_tuichu
退出
媒体类型
ID_yinyue
音乐
媒体类型
ID_tupian
图片
媒体类型
ID_shipin
视频
目录设定
ID_mulu
设定监视目录
在media1Dlg。cpp中头文件下加入CMenu m_Menu;并在BOOL CMedia1Dlg::OnInitDialog()函数中加入m_Menu。LoadMenu(IDR_MENU1);
SetMenu(&m_Menu);这样就可以菜单嵌入该对话框中。建立全局函数int type=1,默认值为1。打开新建的菜单,右击应用程序下的退出,建立类向导,在Messages中选择COMMAND,再点击Add Function。再点击Edit Code,打开函数Ontuichu(),
里面写入CDialog::OnCancel();运行程序后,点击推出时,可退出次对话框.同样的方法为音乐,图片和视频建立类向导,打开函数,分别将type复制为1,2,3;为了选中不同类型后,能够在选项前面打勾.则需要建立类向导,选择UPDATA_COMMAND_UI点击确定之后,在音乐函数中写入 pCmdUI—〉SetCheck(type==1||type==4||type==5);,当type为1或4或5时音乐前面打勾。同理图片所对应的type为2或8或9,视频的type为3或6或7.担当运行时,还不能出现上述现象。因为此函数是菜单所有的,基本对话框中不包含函数,这是就需要借助菜单中的函数。在Cmedia1aDlg类中声明成员函数
OnInitMenuPopup(CMenu *pPopupMenu, UINT nIndex,BOOL bSysMenu),
接着直接将函数copy给此类中。
将函数加入后,运行后,点击不同类型的媒体后,会看到前面打勾。
在对话框的函数中建立全局变量bool mulu=true;默认值为true,表示显示播放列表。接下来在设定监视目录中,与前面同样的方法,建立类向导,选择两个函数,此函数与音乐的函数一样,如下void CMedia1Dlg::Onmulu()
{
if(mulu)
{
m_list.ShowWindow(SW_HIDE);
mulu=false;
}
else
{
m_list。ShowWindow(SW_SHOW);
mulu=true;}
}
void CMedia1Dlg::OnUpdatemulu(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI—>SetCheck(mulu);
}
默认时,此菜单前面打勾,播放列表显示。当打击后,true为false,前面不打勾,播放列表不显示。再次点击时,mulu有变为true.(m_list为播放列表的变量,之后会声明)。
菜单建好后,接下来就时对话框的界面了。在主菜单中选入三个Button4,Button5,Button6, ,ID分别要与菜单中音乐,图片,视频的ID要一样.
为了点击时与点击所对应的菜单一样。并将这三个Button属性中的样式中点击所有者绘图.
在右边的资源框中右击Bitmap,在此文件夹中插入三张图片,图片的格式必须为bmp,接下来就是将图片嵌入这三个button中.对话框的函数中头文件下声明三个CBitmapButton变量,为 m_btnX1,m_btnX2,m_btnX3;在BOOL CMedia1Dlg::OnInitDialog()函数中写入
m_btnX1.LoadBitmaps(IDB_BITMAP2);
m_btnX1。SubclassDlgItem(ID_yinyue,this);
m_btnX1.SizeToContent();
m_btnX2.LoadBitmaps(IDB_BITMAP1);
m_btnX2。SubclassDlgItem(ID_tupian,this);
m_btnX2。SizeToContent();
m_btnX3。LoadBitmaps(IDB_BITMAP3);
m_btnX3.SubclassDlgItem(ID_shipin,this);
m_btnX3。SizeToContent();
每一个CBitmapButton变量与button所对应起来。SizeToContent();是为了将Button的大小与图片的大小想适应.运行后,结果如图。
在对画框中引入四个组合框,标题分别为播放列表,最进播放列表,最近追加项目,最近播放项目.分别在播放列表,最近追加项目,最近播放项目中加入一个列表框。排列如下图
ID从左往右依次为ID_list2,ID_bofang,ID_zuijia,并在属性中选择水平滚动及垂直滚动。右击ID_list2,点击建议类向导,选择添加成员变量,类型为CListBox,名字为m_list。同理,也为其他两个列表框建立两个成员变量,依次为m_zuibo,m_zuija,类型相同.接下来在CMedia1Dlg::OnInitDialog()函数中写入
m_list.SetHorizontalExtent(1000);
m_zuijia。SetHorizontalExtent(1000);
m_zuibo。SetHorizontalExtent(1000)
这是由于水平滑条不灵敏,以此当运行时可以看到水平滑条。垂直滑条得数量到达列表的容量时可以看到.构架成员函数
void CMedia1Dlg::dakaiwenjian()
此函数是为了将九个文件中的数据根据媒体类型的不同,读入所对应的列表框中。
如果这九个文件不存在,则自动创建。文件与所对应的列表如图所示
文件
列表
文件
列表
lixt。txt
视频播放列表
List22.txt
最近播放音频
Lixt31。txt
最近添加视频
List41.txt
图片播放列表
Lixt32。txt
最近播放视频
List42。txt
最近添加图片
List1。txt
音频播放列表
List43。txt
最近播放图片
List21.txt
最近添加音频
在CMedia1Dlg::OnInitDialog()函数中调用此函数,当开始运行此函数时,开始读取文件,默认是音频.在对话框中双击Button4,打开函数,写入
m_list。ResetContent();
m_zuijia。ResetContent();
m_zuibo.ResetContent();
dakaiwenjian();
首先是清除三个列表框中的内容,然后又打开文件,从新读取新的内容。Button5与Button6与之相同。
接下来开始为三个列表添加内容了.添加一个Button,名字为添加文件。双击,打开函数,
if(type==3||type==6||type==7){
char szFileFilter[]=
”Medal File(*。avi,*.wmv,*。asf)|*。avi;*.wmv;*。asf|”
"RMVB File(*。rmvb)|*。rmvb|"
”MP4 File(*。mp4)|*.mp4|”
"Mkv File(*.mkv)|*。mkv|”
"All File(*.*)|*.*||";
CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_NOCHANGEDIR|OFN_ALLOWMULTISELECT,szFileFilter);
POSITION pos=dlg.GetStartPosition();
if(dlg.DoModal()==IDOK)
{ while(pos!=NULL)
{
m_pathname=dlg。GetNextPathName(pos);
for(int i=0;i<m_list。GetCount();i++)
{
CString strtemp;
m_list.GetText(i,strtemp);
if(m_pathname==strtemp)
{ MessageBox(”该文件已存在”);
break;}
}
if(m_zuijia.GetCount()==10)
{
m_zuijia。DeleteString(0);}
if(i==m_list。GetCount())
{
m_list。AddString(m_pathname);
m_zuijia。AddString(m_pathname);
}
}
}
}
此函数是打开视频文件,并将其加入播放列表中,同时还有一个判断是否已存在的if语句,若存在,则不添加.添加的地址也会导入最近添加的项目中,若超过十个,则将第一个删掉。列表框中的排列为时间先后顺序。3,6,7代表视频文件,只是所对应的列表不同。音频与图片与之类似,1,4,5代表音频,2,8,9代表图片.函数的随后还要调用保存函数.视频的保存函数为else if(type==3||type==6||type==7)
{
ofstream file,file1;
file。open(”.\\list。txt");
file1。open(”.\\list31。txt”);
for(int i=0;i<m_list。GetCount();i++)
{
CString strtemp;
m_list。GetText(i,strtemp);
strtemp+=”\n”;
file<〈strtemp;
}
for( i=0;i〈m_zuijia。GetCount();i++)
{
CString strtemp;
m_zuijia.GetText(i,strtemp);
strtemp+=”\n”;
file1<〈strtemp;
}
file1.close();
file.close();
}
用此文件函数,还需要添加头文件#include “fstream。h"。音乐与图片与之相同,只是所保存的文件不同.接下来是保存最近播列表。创建成员函数
void CMedia1Dlg::zuibobaocun()
{ofstream file2;
if(type==1||type==4||type==5)
{file2.open(".\\list22。txt");}
else if(type==3||type==6||type==7)
{file2。open(”。\\list32。txt”);}
else if(
展开阅读全文