王朝网络
分享
 
 
 

在VC6.0下自制多媒体播放器

王朝vc·作者佚名  2006-01-17
宽屏版  字体: |||超大  

在VC6.0下自制多媒体播放器

作者:上海 王凯明

VC6.0可谓是微软的王牌产品,它以强大的功能而赢得了广大程序员的爱好。而用VC的AppWizard、ClassWizard和其中的各种控件可以方便地建立应用程序。

本文就介绍用VC6.0自带的一个ActiveX控件----ActiveMovieControl Object,来建立自己的多媒体播放器。此多媒体具有一般的播放功能,能播放*.mp3,*.wma,*.mdi,*.wav,*.avi,*.dat等文件,还有Repeat功能。

源码下载:MediaPlayer 大小:18.9K

具体步骤:

1. 打开VC6.0,在Projects下选择MFC AppWizard(exe),并取名MediaPlayer,然后建立基于对话框(Dialog

Based)的运用程序。

2. 打开Resource View,选择其中的对话框,打开其中的主对话框,去掉对话框上的“确定”按钮,保留“取消”,将Caption改为“Exit”。然后再在上面加上九个按钮,ID和Caption分别为

IDC_OPEN,Open;

IDC_PLAY,Play;

IDC_PAUSE,Pause;

IDC_STOP,Stop;

IDC_CLOSE,Close;

IDC_LOWER,

IDC_UPPER,=;

IDC_FULLSCREEN,Full;

IDC_REPEAT,Repeat;

再加入两个静态文本控件,分别为IDC_STATIC,Volume;IDC_STATIC2,Status:Normal。

3. 再打开Projects-Add to Project-Components

and Controls-Registered ActiveX Controls对话框,选择其中的ActiveMovieControl

Object, Insert,OK之后,你会发现你的控件面板上多了一项ActiveMovieControl Object,将它选中,直接放在你的对话框上就行了。按Ctrl+W打开ClassWizard为它添加变量CActiveMovie3

m_ActiveMovie。各控件的布局如图:

4. 接下来,就是为程序添加消息处理函数。打开 ClassWizard,为各个按钮加入消息处理函数。在MediaPlayerDlg.cpp文件里为各消息处理函数添加代码,各代码如下:

void CMediaPlayerDlg::OnClose()

{

m_ActiveMovie.CloseWindow();//关闭窗口

}

void CMediaPlayerDlg::OnOpen()

{

char szFileFilter[]=

"Mp3 File(*.mp3)|*.mp3|"

"Wma File(*.wma)|*.wma|"

"Video File(*.dat)|*.dat|"

"Wave File(*.wav)|*.wav|"

"AVI File(*.avi)|*.avi|"

"Movie File(*.mov)|*.mov|"

"Media File(*.mmm)|*.mmm|"

"Mid File(*.mid;*,rmi)|*.mid;*.rmi|"

"MPEG File(*.mpeg)|*.mpeg|"

"All File(*.*)|*.*||";//文件类型过滤

CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);

if(dlg.DoModal()==IDOK){

CString PathName=dlg.GetPathName();

PathName.MakeUpper();

m_ActiveMovie.SetFileName(PathName);

}

}

void CMediaPlayerDlg::OnPlay()

{

m_ActiveMovie.Run();//播放文件

SetTimer(0,20,NULL);//设置定时器

}

void CMediaPlayerDlg::OnStop()

{

m_ActiveMovie.Stop();//停止播放文件

KillTimer(0);//关掉定时器

}

void CMediaPlayerDlg::OnPause()

{

m_ActiveMovie.Pause();

}

void CMediaPlayerDlg::OnUpper()

{

long Volume=m_ActiveMovie.GetVolume();

m_ActiveMovie.Pause();

m_ActiveMovie.SetVolume(Volume+100);

m_ActiveMovie.Run();

}

void CMediaPlayerDlg::OnLower()

{

long Volume=m_ActiveMovie.GetVolume();

m_ActiveMovie.Pause();

m_ActiveMovie.SetVolume(Volume-100);

m_ActiveMovie.Run();

}

void CMediaPlayerDlg::OnRepeat()

{

if(!isRepeat){

isRepeat=TRUE;

SetDlgItemText(IDC_STATIC2,"Status:Repeat");

}

else{

isRepeat=FALSE;

SetDlgItemText(IDC_STATIC2,"Status:Normal");

}

}

void CMediaPlayerDlg::OnFulscreeen()

{

m_ActiveMovie.Pause();

m_ActiveMovie.SetFullScreenMode(true);

m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED);

m_ActiveMovie.Run();

}

(注释:函数OnTimer()需通过ClassWizard(Ctrl+W)来添加,不能直接复制)

void CMediaPlayerDlg::OnTimer(UINT nIDEvent)

{

double CurrentPos=m_ActiveMovie.GetCurrentPosition();

if(CurrentPos==0&&isRepeat)//如果当前是文件的起始位置而且为重复播放状态

m_ActiveMovie.Run();

CDialog::OnTimer(nIDEvent);

}

5. 为使播放器具有Repeat功能,需在头文件MediaPlayerDlg.h

加入控制变量BOOL isRepeat;类型可为Private。同时修改OnInitDialog()函数:

BOOL CMediaPlayerDlg::OnInitDialog()

{

CDialog::OnInitDialog();

isRepeat=FALSE;

……

}

(注:第6步可以不做,只是按钮仍是方形按钮,而做了第6步后则为圆形的)

6. 这样此播放器就具有一般的媒体播放功能了,但为了有更好的用户界面,我将按钮变成了圆形的。为此,要在工程里加入文件RoundButton.h以及RoundButton.cpp用CRoundButton来代替CButton。先打开类向导,为上述按钮添加对应变量。

CRoundButton m_FullScreen;

CRoundButton m_Repeat;

CRoundButton m_Upper;

CRoundButton m_Lower;

CRoundButton m_Close;

CRoundButton m_Exit;

CRoundButton m_Stop;

CRoundButton m_Play;

CRoundButton m_Pause;

CRoundButton m_Open;

(注:以上的个变量本来是Cbutton类型的,你要手动将他们改为CRoundButton,并在此头文件里加上#include "RoundButton.h"。)

7. 好,现在可以编译、连接并运行了,直接按Ctrl+F5,OK便可以看自己的杰作了,打开个mp3文件听听,不错吧!如下图:

源码下载:MediaPlayer

作者信息:

作者:王凯明

联系地址:复旦大学0024信箱

邮编:200433

电话:021-65832369

电子邮件:doose@etang.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有