• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
制作自动循环播放的MP3播放器(VC)
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
制作自动循环播放的MP3播放器(VC)
软件发布 制作自动循环播放的MP3播放器(VC)
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 编程技术 >> VC教程 >> 制作自动循环播放的MP3播放器(VC)

制作自动循环播放的MP3播放器(VC)

添加时间: 2006-2-11 1:18:53  作者: VC教程  阅读次数:287   来源: http://www.d9soft.com

       

  【实现内容】自动循环播放的MP3播放器  

  【应用】自动循环播放的MP3播放器主要用于企业文化的应用。在每天的休息时段,播放器自动循环播放指定的MP3音乐。本自动播放器主要根据本公司的情况编写,包括早上上班,中午吃饭和下午下班三个时间段各播放1小时左右的音乐。播放器启动后,只在托盘中有图标,配置好各个时间段的音乐目录后,不需要人工干预,音乐可以自动启动、循环播放和结束。现已在本公司使用。  

  【 特点】本软件用到许多常用的技巧:  

   1.目录选择对话框  

   2.文件选择对话框中的多个文件类型过滤设定  

   3.应用程序在任务栏上隐藏,而在托盘上显示图标  

   4.进度条的制作  

   5.定时器使用  

   6.带有链接功能的按钮――点击按钮可以打开电子信箱  

   7.椭圆型的彩色按钮,彩色文本  

   8.彩色标题条,彩色标题文字。等等  

   【实现原理】主要使用定时器。程序一旦运行,定时器将每秒响应一次。直到手工退出程序。  
   【主要控件】  

   m_MusicList---ComboBox类型 音乐文件列表  

   【主要程序段及说明】

  void CMp3PlayerDlg::OnOpen() //点击打开按钮,选择音乐文件。可以多选  

   {

  

   m_MusicList.ResetContent();

  

   m_MusicAry.RemoveAll();

  

   m_Music.Close(); //m_Music是CCOMMCI对象

  

   Init();

  

   m_Pause.SetWindowText("暂停");

  

   //

  

   CString filter = "媒体文件(所有类型) *.cda;*.mid;*.rmi;*.midi;*.asf;*.wm;*.wma;*.asx;*.wax;*.m3u;*.wvx;

  *.mpeg;*.mpg;*.m1v;*.mp3;*.avi;*.wmv;*.wav;*.snd;*.au;*.aif;*.aifc ";

  

   filter = filter +"CD音乐曲目(*.cda) *.cda " +

  

   "MIDI文件(*.mid;*.rmi;*.midi) *.mid;*.rmi;*.midi " +

  

   "Windows Media文件(*.asf;*.wm;*.wma;*.wa?) *.asf;*.wm;*.wma; " +
 "媒体播放表(*.asx;*.wax;*.m3u;*.wvx) *.asx;*.wax;*.m3u;*.wvx " +

   "电影文件(*.mpeg;*.mpg;*.m1v;*.mp3) *.mpeg;*.mpg;*.m1v;*.mp3 " +  

   "视频文件(*.avi;*.wmv) *.avi;*.wmv) " +  

   "音频文件(*.wav;*.snd;*.au;*.aif;*.aifc) *.wav;*.snd;*.au;*.aif;*.aifc " +  

   "所有文件(*.*) *.* ";  

   CFileDialog music(TRUE,NULL,NULL,OFN_HIDEREADONLY OFN_ALLOWMULTISELECT,filter);  

   if(music.DoModal() == IDOK)  

   {  

   POSITION pos = music.GetStartPosition();  

   while (pos != NULL)  

   {  

   CString str = music.GetNextPathName(pos);  

   m_MusicAry.Add(str);  

   int index = str.ReverseFind('\\');  

   if(index == -1)  

   m_MusicList.AddString(str); 

   else
  
{

   CString name = str.Mid(index + 1);  

   m_MusicList.AddString(name);

   }  

   }  

   }  

   }  

  

  

   void CMp3PlayerDlg::Play(int index)//播放函数,index为曲目的序号  

   {  

   m_Music.Close();   

   m_MusicList.SetCurSel(index);

  CString sPath = m_MusicAry.GetAt(index);

   m_Music.Open(sPath);

   m_Status.SetWindowText(sPath + _T(" 正在播放..."));//在状态条中显示提示信息 

   m_nLength = m_Music.GetLength();//获取音乐长度  

   m_nPos = 0;  

   m_nTime = m_nLength/1000;//除以1000即为播放时间  

   //  

   m_sMusicLen.Format("%d分%d秒",m_nTime/60,m_nTime%60);//显示播放时间  

   m_sMusicPos.Format("%d分%d秒",m_nPos/60,m_nPos%60);//显示当前播放位置  

   //  

   UpdateData(false);  

   m_MPBar.SetScrollRange(0,m_nTime);//设置音乐播放的进度条范围  

   //  

   m_Volume.SetRange(0,1000);//设置音量调节范围  

   m_Volume.SetPos(m_nVolume);  

   //  

   m_Music.Play(this->m_hWnd);//开始播放  

   SetTimer(2,1000,NULL);//启动2号定时器  

   }  

  BOOL CMp3PlayerDlg::OnInitDialog()//初始化函数

  {  

   m_DlgStyle.sTitleName = "音乐播放器";//设定标题  

   COwnerDrawDialog::OnInitDialog();  

   // Set the icon for this dialog. The framework does this automatically  

   // when the application's main window is not a dialog  

   SetIcon(m_hIcon, TRUE); // Set big icon  

   SetIcon(m_hIcon, FALSE); // Set small icon  

   SetTimer(4,100,NULL);//启动4号定时器  

  

  

  if(m_bAutoRun)  

   SetTimer(1,1000,NULL);//如果是自动播放,则启动1号定时器  

   //以下为应用程序隐藏任务栏,放到托盘中去的程序  

   long wl = GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE);  

   SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,WS_EX_TOOLWINDOW);  

   //  

   NOTIFYICONDATA tnd;  

   tnd.cbSize=sizeof(NOTIFYICONDATA);  

   tnd.hWnd=this->m_hWnd;  

   tnd.uID=IDI_MAINFRAME;  

   tnd.uFlags=NIF_MESSAGE NIF_ICON NIF_TIP;  

   tnd.uCallbackMessage=WM_DLG_SHOW;  

   tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_MAINFRAME));  

   strcpy(tnd.szTip,"音乐播放器");  

   Shell_NotifyIcon(NIM_ADD,&tnd);  

   return TRUE; // return TRUE unless you set the focus to a control  

  }  

  void CMp3PlayerDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) //拖动音乐播放进度条
 

 {  

   if(pScrollBar == &m_MPBar)  

   {

switch(nSBCode)

   {  

   case SB_THUMBTRACK:

   m_nPos = nPos;  

   break;  

   }  

   m_MPBar.SetScrollPos(m_nPos);//改变进度条位置  

   m_Music.Seek(m_nPos*1000);//改变音乐播放进度  

   if(m_bPause)  

   {  

   m_bPause = false;  

   m_Pause.SetWindowText("暂停");  

   }  

   m_Music.Play(this->m_hWnd);  

   }  

   COwnerDrawDialog::OnHScroll(nSBCode, nPos, pScrollBar);  

  }
  

  

   LRESULT CMp3PlayerDlg::OnDlgShow(WPARAM wParam,LPARAM lParam)//系统托盘下鼠标点击图标响应函数  

  {  

   UINT uID;//发出该消息的图标的ID  

   UINT uMouseMsg;//鼠标动作  

   POINT pt;  

   uID=(UINT) wParam;  

   uMouseMsg=(UINT) lParam;  

   GetCursorPos(&pt);  

   if(uID == IDI_MAINFRAME)  

   {  

   if(uMouseMsg==WM_LBUTTONDOWN)//如果是单击左键,则弹出窗口

 {

   if(!IsIconic())  

   {  

   ShowWindow(SW_NORMAL);  

   return true;  

   }  

   ShowWindow(SW_NORMAL);  

   }  

   else if(uMouseMsg == WM_RBUTTONDOWN)//点击右键则弹出右键菜单  

   {  

   CMenu menu;  

   menu.LoadMenu(IDR_MENU);  

   CMenu *popMenu = menu.GetSubMenu(0);  

   popMenu->TrackPopupMenu(TPM_LEFTBUTTON,pt.x,pt.y,this);  

   }
   }  

   return true;   

  } 

   void CMp3PlayerDlg::OnTimer(UINT nIDEvent) //定时器处理  

  {

   if(nIDEvent == 1)//1号定时器,主要处理自动播放功能  

   {
   //  

   Init(); 

   if(!m_bAutoRun)  

   {  

   return;  

   }  

   if(!m_CFile.Open())//如果有自动播放设置,则进行自动播放  

   {  

   return;  

   }

  //
   m_CFile.ReadSetInfo(m_SetInfo);  

   SYSTEMTIME sysTime;  

   GetLocalTime(&sysTime);  

   m_CFile.ReadDayInfo(sysTime.wDayOfWeek,m_Info);  

   m_CFile.Close();  

   int hour = GetHour(m_Info.sSStarttime);  

   int minute = GetMinute(m_Info.sSStarttime);  

   if(sysTime.wHour == hour && sysTime.wMinute == minute)//开始播放上午音乐

   {  

   ReadCatalogMusic(m_Info.sSMusic);//读取配置文件中指定的上午播放音乐目录

   m_nPlay = 0;  

   Play(0);  

   KillTimer(1); //终止1号定时器  

   int duration = atoi(m_Info.sSDuration);//读取播放时间段  

   SetTimer(3,duration*60*1000,NULL);//启动三号定时器  

   m_nFlag = 1;  

   return;  

   }  

   hour = GetHour(m_Info.sMStarttime);  

   minute = GetMinute(m_Info.sMStarttime);  

   if(sysTime.wHour == hour && sysTime.wMinute == minute)//开始播放中午音乐

   {  

   ReadCatalogMusic(m_Info.sMMusic);  

   m_nPlay = 0;  

   Play(0);  

   KillTimer(1);  

   int duration = atoi(m_Info.sMDuration);  

   SetTimer(3,duration*60*1000,NULL);  

   m_nFlag = 2;

return;

   }  

   hour = GetHour(m_Info.sEStarttime);  

   minute = GetMinute(m_Info.sEStarttime);  

   if(sysTime.wHour == hour && sysTime.wMinute == minute)//开始播放下午音乐

    {  

   ReadCatalogMusic(m_Info.sEMusic);  

   m_nPlay = 0;  

   Play(0);  

   KillTimer(1);  

   int duration = atoi(m_Info.sEDuration);  

   SetTimer(3,duration*60*1000,NULL);  

   m_nFlag = 3;  

   return;  

   }
  

  // SetTimer(1,1000,NULL);  

   m_CFile.Close();  

   }  

   if(nIDEvent == 3)//三号定时器,是播放时间段定时器,播放时间到了,就自动停止播放,启动1号定时器,等待下次播放的开始,同时关闭2号和3号定时器,终止播放。  

   {  
   if(m_Music.IsOpen())  

   {  

   m_Music.Close();  

   SetTimer(1,1000,NULL);  

   KillTimer(2);  

   KillTimer(3);  

   }  

   return;

     }  

  if(nIDEvent == 4)//4号定时器是为了马上隐藏窗口。也可以用MoveWindow之类的处理

   {  
   ShowWindow(SW_HIDE);  

   KillTimer(4);  

   return;  

   }  

  if(nIDEvent == 2 && m_Music.IsOpen() && !m_bPause)//2号定时器是为了定时修改对话框中的各个控件状态,比如播放进度条,当前播放时间等  

   {  

   m_nPos += 1;  

   m_sMusicPos.Format("%d分%d秒",m_nPos/60,m_nPos%60);  

   UpdateData(false);  

   m_MPBar.SetScrollPos(m_nPos);  

   if(m_nPos >= m_nTime)  

   {  

   if(m_nPlay == m_MusicAry.GetSize()-1)  

   {  

   if((m_bAutoRun && m_SetInfo.bCyc)    !m_bAutoRun)  

   {  

   m_nPlay = 0;  

   Play(0);  

   m_MPBar.SetScrollPos(0);  

}
   else  

   {  

   //进入睡眠  

   m_Music.Close();  

   SetTimer(1,1000,NULL);  

   KillTimer(2);  

   KillTimer(3);  

   return;  

   }  

   }  

   else  

   {  

   Play(++m_nPlay);  

   m_MPBar.SetScrollPos(0);  

   }  

   }  

   }  

   COwnerDrawDialog::OnTimer(nIDEvent);
  }

   播放器图例

  

请添加描述

 

上下文章:

 

上一篇文章: C++ 中的浮点代码优化 下一篇文章: 用VC++实现ODBC数据源设置

相关文章:

  • DoNews制作人刘韧涉嫌敲诈被刑拘
  • 关闭自动更新恐带来新一轮电脑病毒潮
  • ps教程:教你用Photoshop制作出:失落美女照片胶片
  • 冲上云霄 3dmax制作爆炸燃烧效果
  • 3dsMAX教程:3dsMAX茶杯建模制作逼真茶杯全过程

相关软件:

  • 阿达自动定时关机器 6.60
  • 大头贴制作大师 V2.5.0
  • 青苹果音乐播放器 v1.4
  • CHM电子书制作大师 v2.1
  • HDD硬盘播放器测试工具 1.0
  • 海啸媒体播放器 2.3.081023 超强版

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • VC++之Button控件
  • VC++之Static Box控件
  • VC++之Edit Box控件
  • VC++之Static Box控件
  • VC++之Edit Box控件
  • VC++之Scroll Bar
  • VC++之Scroll Bar
  • VC++之List Box/Check List Box控...
  • VC++ Combo Box/Combo Box Ex控件
  • VC++ List Ctrl控件

VC教程阅读排行

  • VC++之List Box/Check List Box控...
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • VC++之Button控件
  • VC++之Tab Ctrl控件
  • VC++之Edit Box控件
  • VC++之Edit Box控件
  • VC遍历整个目录树查找文件
  • VC++之Scroll Bar
  • VC使用ActiveX控件常见问题

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • VC++之List Box/Check List Box控...
  • 第二章 PowerBuilder 入门之创建新...
  • VC++ List Ctrl控件
  • 第一章 什么是PowerBuilder
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有