编辑: 达达恰西瓜 | 2015-01-31 |
0强大的AppWizard、ClassWizard和其中的各种控件可以方便地建立各种应用程序.但是想要实现更高级更复杂的功能,就要借助丰富的ActiveX控件资源了.这里就要使用VC++6.0自带的一个ActiveX控件――ActiveMovieControl Object,来建立自己的多媒体播放器.此多媒体具有一般的播放功能,能播放:*.mp3,*.wma,*.mdi,*.wav,*.avi,*.dat等文件,还有Repeat功能. 具体步骤: 1. 打开VC6.0,在Projects下选择MFC AppWizard(exe),并取名MediaPlayer,然后建立基于对话框的应用程序. 2. 打开Resource View,选择其中的对话框,打开其中的主对话框,去掉对话框上的"确定"按钮,保留"取消",将Caption改为"退出".然后再在上面加上九个按钮,ID和Caption分别为 IDC_OPEN,打开;
IDC_PLAY,播放;
IDC_PAUSE,暂停;
IDC_STOP,停止;
IDC_CLOSE,关闭;
IDC_LOWER,;
IDC_FULLSCREEN,全屏;
IDC_REPEAT,重复;
再加入两个静态文本控件,分别为: IDC_STATIC,音量;
IDC_STATIC2,状态:正常. 3. 点击"开始"菜单,运行 regsvr32 msdxm.ocx,出现"注册成功"的对话框后打开Projects->Add to Project->Components and Controls->Registered ActiveX Controls对话框,选择其中的ActiveMovieControl Object, Insert,OK之后,会发现控件面板上多了一项ActiveMovieControl Object,将它选中,直接放在对话框上. 按Ctrl+W打开ClassWizard为它添加变量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,"状态:重复");
} else{ isRepeat=FALSE;
SetDlgItemText(IDC_STATIC2,"状态:正常");
} } 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();