简单多媒体制作实验报告Word文件下载.docx
《简单多媒体制作实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《简单多媒体制作实验报告Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
C++6.0
是Microsoft公司在1998年推出的基于Windows
9X和Windows
NT的优秀集成开发环境。
该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。
C++6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在Visual
C++6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。
MFC(MicrosoftFoundationClass)是用来编写Windows应用程序的C++类集,其中封装了大部分WindowsAPI函数和Windows控件,使用MFC类库和VisualC++提供的高度可视的应用程序开发工具,可使应用程序开发变得简单,提高代码的可靠性和可重用性。
随着多媒体性能的极大提升,程序中经常要播放一段视频或者一段音频,如果能够简单地插入音频和视频,将极大缩短程序的开发时间。
本文基于MFC在VisualC++环境下利用WindowsMediaPlayer控件实现了音频视频文件的播放。
它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(MicrosoftFoundationClass)类库。
MFC功能涉及到整个Windows操作系统。
MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。
另外,它提供了大量的代码,指导用户编程时实现某些技术和功能。
因此,使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。
VC++6.0有很好的调试功能。
VC基于C,C++语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在Windows平台无所不能。
四概要设计
列表模块:
显示歌曲。
打开模块:
打开目标文件,如音频、视频文件。
保存模块:
保存列表中的文件存储地址和文件名称。
播放模块:
播放音频、视频文件,播放列表。
关闭模块:
关闭播放器。
五多媒体设计过程
1模块实现函数说明
这些实现模块功能的具体函数均属于CMFCDlg类,它是在建立MediaPlayer工程时由MFC建立的一个对话框的类,在该对话框上进行的操作函数即可实现程序所需要的所有功能,其实现函数则是调用ActiveMovie控件的相关函数,从而完成各项具体功能。
各个模块的具体实现函数描述见下表所示:
模块名称
实现函数
列表模块
voidCMFCDlg:
:
Onlist()
打开模块
Onadd()
保存模块
Onsave()
播放模块
Onplay()
关闭模块
Onexit()
2界面设计
设计界面如下图所示,其中播放控制按钮有播放列表,添加文件,保存列表,播放文件,退出程序。
其他控件有WMPlayer和List1。
3播放列表
Onlist()
{
flag=!
flag;
if(!
flag)
{
SetWindowPos(NULL,0,0,480,340,SWP_NOMOVE);
}
else
SetWindowPos(NULL,0,0,680,340,SWP_NOMOVE);
}
函数注解:
BOOLSetWindowPos(HWNDhWnd,HWNDhWndInsertAfter,intx,inty,intcx,intcy,UINTnFlags);
函数作用:
调用这个成员函数以改变子窗口、弹出窗口和顶层窗口的大小、位置和Z轴次序。
窗口在屏幕上按照它们的Z轴次序排序。
在Z轴次序上处于顶端的窗口将程序在所有其它窗口的顶部。
子窗口的所有坐标都是客户坐标(相对于父窗口客户区的左上角)。
窗口可以被移动到Z轴次序的顶部,既可以通过将pWndInsertAfter参数设为&
wndTopMost,并确保没有设置SWP_NOZORDER标志,也可以通过设置窗口的Z轴次序使它位于所有现存的顶层窗口上方。
当一个非顶层窗口被设为顶层窗口时,它拥有的窗口也被设为顶层的。
它的拥有者不发生变化。
如果顶层窗口被重新定位到Z轴次序的底部(&
wndBottom)或任何非顶层窗口之后,则它将不再是顶层窗口。
当顶层窗口被变为非顶层窗口时,它所有的拥有者和它拥有的所有窗口都被变为非顶层窗口。
参数作用:
pWndInsertAfter标识了在Z轴次序上位于这个CWnd对象之前的CWnd对象。
这个参数可以是指向CWnd对象的指针,也可以是指向其他值的指针。
x指定了窗口左边的新位置。
y指定了窗口顶部的新位置。
cx指定了窗口的新宽度。
cy指定了窗口的新高度。
nFlags指定了大小和位置选项。
当其值为SWP_NOMOVE表示保持当前的位置(忽略x和y参数)。
4添加文件
Onadd()
charszFileFilter[]="
媒体文件(*.avi,*.mp3,*.wma)|*.avi;
*.mp3;
*.wma;
|"
;
CFileDialogdlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_NOCHANGEDIR|OFN_ALLOWMULTISELECT,szFileFilter);
POSITIONpos=dlg.GetStartPosition();
if(dlg.DoModal()==IDOK)
while(pos!
=NULL)
m_pathname=dlg.GetNextPathName(pos);
m_list.AddString(m_pathname);
类注解:
CFileDialog类封装了Windows常用的文件对话框。
常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。
可以用构造函数提供的方式使用CFileDialog,也可以从CFileDialog派生出自己的对话类并编写一个构造函数来适应你的需要。
每种情况下,对话框都与标准MFC对话框一样工作。
因为它们都是CCommonDialog类的派生类。
构造函数:
DoModal显示对话框并使用户可以进行选择。
初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。
DoModal返回不论是用户选择了OK(IDOK)还是取消(IDCANCEL)按钮。
GetNextPathName返回下一个选定文件的完整路径
GetStartPosition返回文件名列表的第一个元素位置
5保存列表
Onsave()
CStdioFilefile;
file.Open("
.\\list.txt"
CFile:
modeCreate|CFile:
modeReadWrite|CFile:
typeText);
//打开文件
for(inti=0;
i<
m_list.GetCount();
i++)
CStringstrtemp;
m_list.GetText(i,strtemp);
strtemp+="
\n"
//需要换行
file.WriteString(strtemp);
}//对文件进行写操作
file.Close();
//关闭文件
6播放文件
Onplay()
m_player.SetUrl(m_pathname);
(1)视频AVI格式
(2)Wma格式音乐
(3)MP3格式音乐
6退出程序
程序代码:
Onexit()
OnOK();
六心得体会
经过一个星期的努力,终于在所学习的MFC的基础上,设计制作一款小巧实用的多媒体播放器。
在课程设计过程中,虽然遇到了很多问题,但是经过反复查阅资料和不断尝试,以及和其他同学的讨论,最终顺利完成了设计工作,调试过后可以在要求的条件下完美运行。
当然,能力水平有限,所以播放器的功能不多,还不能播放更多格式比如rmvb,flv,wmv等格式的视频文件,但完全可以实现日常的媒体播放任务。
本次设计任务并不是很难,主要依据在互联网上找了一个关于制作简单音乐播放器的视频,通过跟随操作以快速熟悉相关控件、变量、函数等之间的关联。
幸好,WindowsMediaPlayer这一控件本身提供的操作函数很丰富,可以直接调用。
随着不断的学习,我对这一控件和这次设计的目标越来越熟悉,逐渐产生了一些想法,通过附加一些简单的命令语句,使软件更加的人性化,操作界面更加友好。
尽管如此,我觉得自己制作的多媒体播放器的可用性实在不佳,虽然能够实现基本功能,在程序结构方面应该还有很大的优化空间。
总之,通过自己的努力完成了本次设计工作,内心很有成就感,但是我也知道,我所做的设计都是拿别人的成果重新进行组建。
如果想要在软件方面有所发展,那还有很长的路要走。
同时我也明白了,想要把学习的知识变成自己的,就要在学习的过程中,不断的融入自己的思想,更加创新和人性化。
七参考文献
【1】黄维通,贾续涵.VisualC++面向对象与可视化程序设计[M].北京:
清华大学出版社,2011年
【2】梁普选.VisualC++程序设计与实践:
实验与指导[M].北京:
清华大学出版社,北京交通大学出版社,2007年
【3】CharlesPetzold著,方敏 译,清华大学出版社出版的《windows程序设计》
【4】刘雅琴,夏玉杰.基于MFC的多媒体播放器的实现[J].信息技术,2009,(03).
【5】龚月琴.多功能媒体播放器的设计与开发[J].福建电脑,2004,(07).
【6】.CharlesPetzold著,方敏 译,清华大学出版社出版的《windows程序设计》
八源代码
#include"
stdafx.h"
MFC视频播放器.h"
MFC视频播放器Dlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
intflag;
CStringm_pathname;
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
CAboutDlg():
CDialog(CAboutDlg:
IDD)
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
voidCAboutDlg:
DoDataExchange(CDataExchange*pDX)
CDialog:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//CMFCDlgdialog
CMFCDlg:
CMFCDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMFCDlg:
IDD,pParent)
//{{AFX_DATA_INIT(CMFCDlg)
//NOTE:
theClassWizardwilladdmemberinitializationhere
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->
LoadIcon(IDI_ICON1);
//{{AFX_DATA_MAP(CMFCDlg)
DDX_Control(pDX,IDC_LIST1,m_list);
DDX_Control(pDX,IDC_OCX1,m_player);
BEGIN_MESSAGE_MAP(CMFCDlg,CDialog)
//{{AFX_MSG_MAP(CMFCDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_list,Onlist)
ON_BN_CLICKED(IDC_add,Onadd)
ON_LBN_DBLCLK(IDC_LIST1,OnDblclkList1)
ON_BN_CLICKED(IDC_play,Onplay)
ON_BN_CLICKED(IDC_save,Onsave)
ON_BN_CLICKED(IDC_exit,Onexit)
//CMFCDlgmessagehandlers
BOOLCMFCDlg:
OnInitDialog()
OnInitDialog();
//Add"
About..."
menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&
0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<
0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->
AppendMenu(MF_SEPARATOR);
AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'
smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);
//Setbigicon
SetIcon(m_hIcon,FALSE);
//Setsmallicon
SetWindowPos(NULL,0,0,480,340,SWP_NOMOVE);
//无相对移动
m_list.SetHorizontalExtent(1000);
CStdioFile*fsp=new
CStdioFile("
modeRead);
CStringstrtemp;
while(fsp->
ReadString(strtemp))
m_list.AddString(strtemp);
fsp->
Close();
deletefsp;
//TODO:
Addextrainitializationhere
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
OnSysCommand(UINTnID,LPARAMlParam)
if((nID&
0xFFF0)==IDM_ABOUTBOX)
CAboutDlgdlgAbout;
dlgAbout.DoModal();
else
CDialog:
OnSysCommand(nID,lParam);
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
OnPaint()
if(IsIconic())
CPaintDCdc(this);
//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&
rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
OnPaint();
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCMFCDlg:
OnQueryDragIcon()
return(HCURSOR)m_hIcon;
*