自动循环播放的MP3播放器(续)

原创 2004年05月24日 17:02:00

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

{

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

?????? COwnerDrawDialog::OnInitDialog();

?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

?????? // 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);

}

【备注】:由于本软件用到许多辅助模块,在此不一一详解。如果有兴趣的朋友,可以留下EMAIL,笔者可以将程序免费送出。

播放器图例播放器图例

使用Java实现MP3音乐播放器

[+] JavaSound是一个小巧的低层API,支持数字音频和MIDI数据的记录/回放。在JDK 1.3.0之前,JavaSound是一个标准的Java扩展API,但从Java 2的1.3...
  • bingheliushui520
  • bingheliushui520
  • 2014年05月20日 17:42
  • 6193

使用Java实现MP3音乐播放器

转自:http://blog.csdn.net/liuzhongbing/article/details/4535402
  • ltx06
  • ltx06
  • 2014年06月10日 19:30
  • 4976

使用FFmpeg编写音乐播放器

http://www.hyq.me/2013/07/10/play-with-ffmpeg/ 本文介绍了用ffmpeg编写一个简单的音乐播放器, 适合初学者入门一下. 本文用F...
  • leonpengweicn
  • leonpengweicn
  • 2014年08月18日 17:31
  • 1866

基于嵌入式ARM的mp3播放器的设计

一、       设计题目:基于ARM的mp3播放器的设计 二、       课程设计教学目的: 1、了解并掌握系统电路的一般设计方法,具备初步的独立设计能力; 2、掌握Unix/Linux系统...
  • yan420523
  • yan420523
  • 2013年05月13日 15:33
  • 3523

基于C语言控制台程序的简易MP3音乐播放器

这是我们小学期的第一个大作业,因感受颇深,特此写下这篇博客留作纪念。 内容:设计一个带有播放控制和音量调节功能的控制台音乐播放器,其中播放控制的子菜单能实现播放暂停切换、停止当前曲、播放上一曲和...
  • xiaoye_dlut
  • xiaoye_dlut
  • 2017年06月29日 18:01
  • 1682

用DELPHI写的播放器核心代码,播放MP3无压力

主窗口代码: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Con...
  • tcmakebest
  • tcmakebest
  • 2013年12月14日 17:03
  • 1156

随机播放模式的实现

前言 播放器大致共有三种播放模式:列表循环、单曲循环、随机播放。前两者不难实现,所以这里主要讲到的是随机播放的思想,也同时附上实现。实现的例子是Winform+WndowsMediaPlayer控件...
  • qq_34802416
  • qq_34802416
  • 2017年08月16日 09:48
  • 1317

开源一个VC++实现的MP3播放器(支持换肤、截屏、半透明)源码

一、说明: 这个项目是在2012年写的,大学期间比较无聊。程序是基于MFC的,当时初接触开发很多东西都做得不太好(代码规范、效率等),工作后也没再用MFC了,而且个人也不看好MFC的前途,所以就没...
  • mfcing
  • mfcing
  • 2015年01月25日 09:58
  • 2097

python实现简单的音乐播放功能

对于热门语言深感兴趣 ,激励自己多多学习和实践,自己也决定做个开头,一步步来实现音乐播放器功能。刚开始的设计,只是实现了简单的音乐播放、暂停、退出功能。至于还有些功能键的添加, 以及树形结构来添加播放...
  • qq_15508113
  • qq_15508113
  • 2015年11月27日 15:47
  • 6247

Ubuntu终端命令行播放音乐(mp3)

转自:http://www.linuxdiyf.com/linux/21825.html 有很多在终端命令行播放mp3的工具,有的甚至可以生成播放列表。也只有命令行重度使用者有这个需求,下面我们...
  • MaoshiYIHAO
  • MaoshiYIHAO
  • 2017年05月16日 15:27
  • 1053
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自动循环播放的MP3播放器(续)
举报原因:
原因补充:

(最多只允许输入30个字)