用C语言制作播放器
的变量,如下所示: //MovieDlg.h: header. file Protected : HICON m_hIcon; CActiveMovie3 m_ActiveMovie;
8. 添加菜单的消息映射。并编辑代码响应功能,其代码如下所示:
(1)添加【打开】按钮的处理函数,它的主要功能是初始化路径, 取得播放曲目列表文件的全路径并利用文件对话框打开视频文件,具体实 现 步 骤 为 , 在 对 话 框 资 源 中 , 双 击 打 开 文 件 按 钮 , 出 现 “ Add Member Function”对话框,默认 Member Function Name 为 OnOpen,单击“OK”按 钮,进入 OnOpen()函数编辑区,添加如下代码:
void CMediaPlayerDlg::OnStop() {
//在这里增加控制处理程序代码 m_ActiveMovie.Stop(); KillTimer(0); //关掉定时器 }
(5)添加【暂停】按钮的处理函数,它的主要功能是利用文件对话框暂 停视频文件的播放,具体实现如下:
void CMediaPlayerDlg::OnPause() {
显示媒体文件信息(文件名、路径) 媒体播放控制:打开文件、播放、暂停、 停止、退出、全屏 显 示 播 放 信 息 ( 播 放 进 度 、 状 态 )、 控 制 音量 打开文件、播放、暂停、停止、退出、全 屏 放大音量,减小音量
音量控制和媒体播放对象对界面管理存在依赖关系,这两个对象要从 界面获取控制指令,它们的属性要在界面上显示。本播放器的类图如图 2 所示。
if (IsIconic()) {
CPaintDC dc (this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
//在用户端长方形中置图像 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2;
m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED); //将窗口显示为最大
m_ActiveMovie.Run(); //继续播放 } (9)设置定时功能 void CMediaPlayerDlg::OnTimer(UINT nIDEvent) {
double CurrentPos=m_ActiveMovie.GetCurrentPosition(); //得到当前位置
图 3 播放器界面设计
四 系统实现
启动 Visual C++ 6.0,执行 New—Project 新建菜单项,新建一个 MFC AppWizard(ExE)应用 ,在 左上 方的工 程文 本 中 输入 “Player”,完 成 后 单 击【确定】按钮,进入 MFCAppWizard 向导。如图 4 所示。
"AVI File (*.avi)|*.avi|" "Movie File (*.mov)|*.mov|" "Media File (*.mmm)|*.mmm|" "Mid File (*.mid;*, rmi)|*.mid;*.rmi|" "MPEG File (*.mpeg)|*.mpeg|" "All File (*.*)|*.*||"; CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); ∥定义打开对话框对象 if (dlg.DoModal()==IDOK) { CString PathName=dlg.GetPathName();//获取一个字符串 PathName.MakeUpper(); m_ActiveMovie.SetFileName(PathName);// 设 置 该 串 为 媒 体 播 放器文件 } } 其 中 ,第 一 条 语 句 用 于 设 置 选 择 文 件 的 类 型 ,第 二 条 语 句 用 于 创 建 一 个“ 打 开文件”的对话框,后面的语句用于选择要播放的文件。 (2)添加【关闭】按钮的处理函数,它的主要功能是利用文件对话框关 闭 视 频 文 件 , 具 体 实 现 步 骤 同 ( 1), 添 加 的 代 码 如 下 : void CMediaPlayerDlg::OnClose() { //在这里增加控制处理程序代码 m_ActiveMovie.CloseWindow(); //关闭窗口 } (3)添加【播放】按钮的处理函数,我们先判断文件的状态,再调用控 件的有关方法来播放视频文件,具体代码如下: void CMediaPlayerDlg::OnPlay() { m_ActiveMovie.Run(); SetTimer(0,20, NULL); //设置定时器模式 } (4)添加【停止】按钮的处理函数,它的主要功能是利用文件对话框停 止视频文件的播放,具体实现如下:
} (8)添加【全屏】按钮的处理函数,它的主要功能是把视频播放器切换 成全屏形式进行播放,具体实现如下: void CMediaPlayerDlg::OnFulscreeen() {
m_ActiveMovie.Pause(); //暂停播放
m_ActiveMovie.SetFullScreenMode(true); //设置全屏模式
void CMediaPlayerDlg::OnOpen () {
char szFileFilter [] = //设置打开下拉菜单
"Mp3 File(*.mp3)|*.mp3|" "Wma File (*.wma)|*.wma|" "Video File (*.dat)|*.dat|" "Wave File (*.wav)|*.wav|"
媒体播放
播放器
<< use>> 用户
音量调节
图 1 视频播放器 UML 用例图
二 对象分析
由于播放器主要围绕实现以上两大功能,可以建立如表 1 所示的对象。
表 1 播放器所建对象列表
对象
操作界面
媒体播放 音量控制
属性
方法
媒 体 文 件 、路 径 ,媒 体 播 放 进 度 、状 态 ,音 量 信息
媒 体 文 件 名 、路 径 ,控 制命令 音量调节
音量控制
+音量大小:unsigned long +增大音量():void +减小音量():void
图 2 播放器类图
三 界面设计
界面应满足以下要求: 1. 界面首先要布置一系列按钮控件实现所有要实现的功能; 2. 设置“播放进度条”来指示媒体文件的播放进度,还应该可以用 鼠标拖动进度条来改变播放进度; 3. 设置音量控制按钮(包括增大和减小); 4. 界面应尽量美观; 根据以上描述,程序运行时效果如图 3 所示。
利用 VC++设计视频播放器
一 需求分析
制作一个视频播放器,能够播放多种格式的多媒体文件:CD 音乐曲目 (.cda)、数字化波形声音(.WAV)、MIDI 文件(. mid, .rmi, .midi)、Windows Media 文件(. asf, .wm, .wma )、电影文件(. mpeg , . mpg , .mp3)、视频 文件(.avi , . wmv)、音频文件(. wav , . snd , .au , .aif )等。能够 有用户自己选择文件,提供媒体播放控制:打开、播放、暂停、停止、全屏能控 制播放音量的大小。应用程序界面美观,使用方便,有完善的操控按钮或进度指 示条等。本课题对软硬件平台要求不高,操作系统可选择 Windows2000/Window XP。在 Visual C++ 6.0 下用 ActiveMovie 控件来实现。 本课程设计用例如图 1 所示,用户使用播放器,播放器完成媒体播放和音量调节 两大功能。
isRepeat=TRUE; //如果重复为真
SetDlgItemText(IDC_STATIC2,"Status:Repeat"); //重复播放 } else{
isRepeat=FALSE; //如果重复为假
SetDlgItemText(IDC_STATIC2,"Status:Normal"); }
//拉图像 dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } }
6. 设置对话框的属性。在对话框的属性框中的 Menu 框中选择 ID_MENU1
菜单。这样就把创建的菜单加入到对话框中。
7. 创建控件类的对象,在对话框类的头文件中添加 CActiveMovie3 类型
if(CurrentPos==0&&isRepeat) m_ActiveMovie.Run();
图 5 ActiveMovie 添加控件
4. 在对话框类的文件夹中包含控件类,添加的代码如下:
//MovieDlg.h : header file #include “activemovie3.h”
5. OnPaint( )
播放器对话框函数。 void CMediaPlayerDlg::OnPaint() {
媒体播放
+媒体文件路径 +媒体文件名 +播放控制命令 +查找文件 +播放():void +暂停():void +停止():Void +退出():Void +全屏():Void