分享
 
 
 

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

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

}

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

播放器图例

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有