wxWidgets简单音乐播放程序

预览图

mp3.jpg

大小: 12.41 K
尺寸: 396 x 479
浏览: 47 次
点击打开新窗口浏览全图

打开code::blocks新建一个wxwidgets工程mp3,记得选中mediactrl.

添加核心代码

在头文件mp3Main.h定义几个变量和方法并引入两个要用到的头文件,代码如下

C++代码
  1. /***************************************************************  
  2.  * Name:      mp3Main.h  
  3.  * Purpose:   Defines Application Frame  
  4.  * Author:    liminggui (linuxphp@126.com)  
  5.  * Created:   2010-01-16  
  6.  * Copyright: liminggui (blog.linuxphp.org)  
  7.  * License:  
  8.  **************************************************************/  
  9.   
  10. #ifndef MP3MAIN_H   
  11. #define MP3MAIN_H   
  12.   
  13. //(*Headers(mp3Frame)   
  14. #include <wx/menu.h>   
  15. #include <wx/frame.h>   
  16. #include <wx/statusbr.h>   
  17. //*)   
  18. #include "wx/mediactrl.h"   //for wxmediactrl   
  19. #include "wx/filedlg.h"   
  20.   
  21. class mp3Frame: public wxFrame   
  22. {   
  23.     public:   
  24.   
  25.         mp3Frame(wxWindow* parent,wxWindowID id = -1);   
  26.         virtual ~mp3Frame();   
  27.   
  28.     private:   
  29.   
  30.         //(*Handlers(mp3Frame)   
  31.         void OnQuit(wxCommandEvent& event);   
  32.         void OnAbout(wxCommandEvent& event);   
  33.         //*)   
  34.         void Load(wxCommandEvent& event);   
  35.         void Play(wxMediaEvent& event);   
  36.         wxMediaCtrl* m_mediactrl;   
  37.   
  38.         //(*Identifiers(mp3Frame)   
  39.         static const long idPlay;   
  40.         static const long idMenuQuit;   
  41.         static const long idMenuAbout;   
  42.         static const long ID_STATUSBAR1;   
  43.         //*)   
  44.   
  45.         //(*Declarations(mp3Frame)   
  46.         wxMenuItem* MenuItem3;   
  47.         wxStatusBar* StatusBar1;   
  48.         //*)   
  49.   
  50.         DECLARE_EVENT_TABLE()   
  51. };   
  52. enum{   
  53. wxID_MEDIACTRL   
  54. };   
  55. #endif // MP3MAIN_H   

 

在主文件mp3Main.cpp里添加实现,要注意的是wxMediaCtrl实例并不能能load过文件直接play,而要等文件加载完后执行事件来play.具体看下面

在mp3Frame::mp3Frame(wxWindow* parent,wxWindowID id)函数尾部增加

 

C++代码
  1. Connect(idPlay,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&mp3Frame::Load);   
  2.   Connect(wxID_MEDIACTRL, wxEVT_MEDIA_LOADED, wxMediaEventHandler(mp3Frame::Play));   
  3.   
  4.   //初始化媒体类   
  5.   m_mediactrl = new wxMediaCtrl();   
  6.   bool bOK = m_mediactrl->Create(this, wxID_MEDIACTRL, wxEmptyString,   
  7.                                       wxDefaultPosition, wxDefaultSize, 0   
  8.                                       ,wxMEDIABACKEND_WMP10);   
  9.   wxASSERT_MSG(bOK, wxT("Could not create media control!"));   
  10.   wxUnusedVar(bOK);   
  11.   //设置工具条   
  12.   m_mediactrl->ShowPlayerControls(wxMEDIACTRLPLAYERCONTROLS_DEFAULT);   
  13.   SendSizeEvent();//Force it to reevaluate the children to show wxMediaCtrl  

 

再增加两个函数

 

C++代码
  1. void mp3Frame::Load(wxCommandEvent& event)   
  2. {   
  3.     wxFileDialog fd(this);   
  4.     //选择文件   
  5.     if(fd.ShowModal() == wxID_OK)   
  6.     {   
  7.         //加载歌曲   
  8.         if (!m_mediactrl->Load(fd.GetPath()))   
  9.         {   
  10.             wxMessageBox(_T("0"), _T("load failed!"));   
  11.         }   
  12.   
  13.     }   
  14.   
  15. }   
  16. void mp3Frame::Play(wxMediaEvent& WXUNUSED(event))   
  17. {   
  18.     //播放歌曲   
  19.     if( !m_mediactrl->Play() )   
  20.     {   
  21.         wxMessageBox(wxT("Couldn't play movie!"));   
  22.     }   
  23.     //设置音量   
  24.     m_mediactrl->SetVolume(0.5);   
  25. }  

 

简单的音乐程序就完成了。

完整代码也提供下载。用code::blocks打开项目文件,直接编译就可以了。

///////////////////////

以上为本人辛苦研究查找资料所做,期间参考了不少GOOGLE的资料,以后GOOGLE在国内的资料会更少了,记念下。

如转载,请保留本文链接

源码包

mp3.rar

可执行文件

mp3-exe.rar

Tags: 音乐 , wxmediactrl

上一篇: 用Filezilla解决FTP乱码   下一篇: 去掉ubuntu讨厌的更新

你问我答

  1. #1 头像 stushl 2011-08-13 18:57:19
    顶,找了半天才找到一个例子
  2. #2 头像 harry1314nanjing 2011-12-27 13:31:36
    顶,好不容易才找到了
  3. #3 头像 youngwenhao 2012-02-16 17:47:56
    挺不错的
  4. #4 头像 白纸黑字 2012-04-15 10:12:34
    顶,终于找了个

提交疑问

回顶部