预览图
打开code::blocks新建一个wxwidgets工程mp3,记得选中mediactrl.
添加核心代码
在头文件mp3Main.h定义几个变量和方法并引入两个要用到的头文件,代码如下
C++代码
- /***************************************************************
- * Name: mp3Main.h
- * Purpose: Defines Application Frame
- * Author: liminggui (linuxphp@126.com)
- * Created: 2010-01-16
- * Copyright: liminggui (blog.linuxphp.org)
- * License:
- **************************************************************/
- #ifndef MP3MAIN_H
- #define MP3MAIN_H
- //(*Headers(mp3Frame)
- #include <wx/menu.h>
- #include <wx/frame.h>
- #include <wx/statusbr.h>
- //*)
- #include "wx/mediactrl.h" //for wxmediactrl
- #include "wx/filedlg.h"
- class mp3Frame: public wxFrame
- {
- public:
- mp3Frame(wxWindow* parent,wxWindowID id = -1);
- virtual ~mp3Frame();
- private:
- //(*Handlers(mp3Frame)
- void OnQuit(wxCommandEvent& event);
- void OnAbout(wxCommandEvent& event);
- //*)
- void Load(wxCommandEvent& event);
- void Play(wxMediaEvent& event);
- wxMediaCtrl* m_mediactrl;
- //(*Identifiers(mp3Frame)
- static const long idPlay;
- static const long idMenuQuit;
- static const long idMenuAbout;
- static const long ID_STATUSBAR1;
- //*)
- //(*Declarations(mp3Frame)
- wxMenuItem* MenuItem3;
- wxStatusBar* StatusBar1;
- //*)
- DECLARE_EVENT_TABLE()
- };
- enum{
- wxID_MEDIACTRL
- };
- #endif // MP3MAIN_H
在主文件mp3Main.cpp里添加实现,要注意的是wxMediaCtrl实例并不能能load过文件直接play,而要等文件加载完后执行事件来play.具体看下面
在mp3Frame::mp3Frame(wxWindow* parent,wxWindowID id)函数尾部增加
C++代码
- Connect(idPlay,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&mp3Frame::Load);
- Connect(wxID_MEDIACTRL, wxEVT_MEDIA_LOADED, wxMediaEventHandler(mp3Frame::Play));
- //初始化媒体类
- m_mediactrl = new wxMediaCtrl();
- bool bOK = m_mediactrl->Create(this, wxID_MEDIACTRL, wxEmptyString,
- wxDefaultPosition, wxDefaultSize, 0
- ,wxMEDIABACKEND_WMP10);
- wxASSERT_MSG(bOK, wxT("Could not create media control!"));
- wxUnusedVar(bOK);
- //设置工具条
- m_mediactrl->ShowPlayerControls(wxMEDIACTRLPLAYERCONTROLS_DEFAULT);
- SendSizeEvent();//Force it to reevaluate the children to show wxMediaCtrl
再增加两个函数
C++代码
- void mp3Frame::Load(wxCommandEvent& event)
- {
- wxFileDialog fd(this);
- //选择文件
- if(fd.ShowModal() == wxID_OK)
- {
- //加载歌曲
- if (!m_mediactrl->Load(fd.GetPath()))
- {
- wxMessageBox(_T("0"), _T("load failed!"));
- }
- }
- }
- void mp3Frame::Play(wxMediaEvent& WXUNUSED(event))
- {
- //播放歌曲
- if( !m_mediactrl->Play() )
- {
- wxMessageBox(wxT("Couldn't play movie!"));
- }
- //设置音量
- m_mediactrl->SetVolume(0.5);
- }
简单的音乐程序就完成了。
完整代码也提供下载。用code::blocks打开项目文件,直接编译就可以了。
///////////////////////
以上为本人辛苦研究查找资料所做,期间参考了不少GOOGLE的资料,以后GOOGLE在国内的资料会更少了,记念下。
如转载,请保留本文链接
源码包
可执行文件
