现在用api写音乐播放器遇到的问题,用了两天了,也解决不了。。。 我想学会用slider控件,显示音乐播放器的进程,如题,就是我想播放音乐的时候,然后当它播放的时候,那个油条就跟着我走,直到这首歌播放完。还有音乐播放的循环,随机循环的,全部循环的那些谢谢求各位前辈们的提示谢谢谢谢谢谢谢谢谢谢谢谢谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接用media player 控件开发,简单有效 unsigned long CPlayerDlg::getmusictime(CString s) //获取音乐的播放时间{ unsigned long m_dLength; int m_wDeviceID; // char buf[128]; MCI_OPEN_PARMS mciOpen; MCI_STATUS_PARMS mciStatusParms; MCIERROR mciError; mciOpen.lpstrElementName=(LPCTSTR)s;//取得文件名 mciError=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpen);//打开文件 m_wDeviceID=mciOpen.wDeviceID; mciStatusParms.dwItem=MCI_STATUS_LENGTH; mciSendCommand(MCI_ALL_DEVICE_ID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);//关键,取得长度 m_dLength=mciStatusParms.dwReturn; // mciSendCommand(m_wDeviceID,MCI_CLOSE,0,NULL);//关闭文件 MusicLength=m_dLength; return m_dLength;}//=================================================================== CSliderCtrl* CSDC=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1); //进度条 CSDC->SetPos((CSDC->GetPos())+1);//=======================================================================//音乐播放的循环,随机循环的,全部循环加一个菜单,可以设置播放模式,如用一个整数区分,,放完一首之后,检查播放模式, 用MCI来做的话,还是挺简单的、、 CSliderCtrl* CSDC=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1); //进度条这个是什么意思?? 。。Slider控件 你肯定要设置 宽高 然后设置最大值 和最小值你只要取到歌曲的总时长 然后播放的时候 记录下时间 在Timer里去更新 Slider滑块的位置不就得了随机播放 就是从你的播放列表里 随便拿出一首歌播放啊列表循环 比如你有个列表1到5 就是你判断歌曲有没有播放到5 5一完 马上跳到1不就做完了 // BrowseDirDialog.cpp ////////////////////////////////////////////////////////////////////// #include "stdafx.h"#include "MciPlay.h"#include < MMSystem.h >#include < Vfw.h >#include < shlobj.H >#pragma comment(lib, "winmm.lib")//#pragma comment(lib, "Vfw32.lib")#define AudioStereo 0#define AudioLeft 1#define AudioRight 2#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif/*//构造函数 CMciPlay::CMciPlay() {} //析构函数 CMciPlay::~CMciPlay() { } */WNDPROC OldProc;LRESULT CALLBACK MCIWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);/*'======================================================*\'根据文件名,确定设备\'=======================================================*/LPSTR CMciPlay::GetDriverID(LPSTR ff){ char aa[3]; int i; char bb[3]; int lenff=strlen(ff); for(i=0;i<3;i++) { aa[i]=ff[lenff-3+i]; if(aa[i]>=97||aa[i]<=122)aa[i]-=32; } aa[3]=0; strcpy(bb,"MID"); if(strcmp(aa,bb)==0)return "Sequencer"; strcpy(bb,"RMI"); if(strcmp(aa,bb)==0)return "Sequencer"; strcpy(bb,"IDI"); if(strcmp(aa,bb)==0)return "Sequencer"; strcpy(bb,"WAV"); if(strcmp(aa,bb)==0)return "Waveaudio"; return "MPEGVideo";}//=======================================================//打开MCI设备,FILENAME为文件名,传值代表成功与否//=======================================================bool CMciPlay::OpenMusic(LPSTR FileName,HWND hWnd=NULL){ CloseMusic(); CString ShortPathName,lpstrCommand; CString tmpStr=FileName; ShortPathName=ToShortPathName(FileName);// if(tmpStr.Left(7)=="http://")// ShortPathName=FileName;// else// GetShortPathName(FileName,ShortPathName.GetBuffer(0), 255); // MessageBox(NULL,ShortPathName.GetBuffer(0),"",MB_OK); char *DrvID=GetDriverID(ShortPathName.GetBuffer(0)); lpstrCommand.Format("open %s type %s alias NOWMUSIC",ShortPathName.GetBuffer(0), DrvID); if(strcmp(DrvID,"MPEGVideo")>=0) { if(hWnd!=NULL) lpstrCommand.Format("open %s type %s alias NOWMUSIC parent %d style child",ShortPathName.GetBuffer(0), DrvID,(int)hWnd); else lpstrCommand+=" style overlapped "; } if( mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0 ) { OldProc=(WNDPROC)GetWindowLong(GetWindowHandle(),GWL_WNDPROC); //MCIWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); SetWindowLong( GetWindowHandle(),GWL_WNDPROC,(long)MCIWindowProc ); return true; } return false;}//=======================================================//关闭MCI设备,FILENAME为文件名,传值代表成功与否//=======================================================bool CMciPlay::CloseMusic(){ if( mciSendString("close NOWMUSIC",NULL, 0,0)==0 ) return true; else return false;}//'======================================================//'播放文件//'======================================================bool CMciPlay::PlayMusic(){ //MCIERROR WINAPI mciSendString(LPCSTR lpstrCommand, LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback); if(mciSendString("play NOWMUSIC", NULL, 0, 0)==0) return true; else return false;}//'======================================================//'获取媒体的长度//'======================================================long CMciPlay::GetMusicLength(){ char RefStr[80]; mciSendString("status NOWMUSIC length", RefStr, 80, 0); return atol(RefStr);}//'======================================================//'添充画面//'======================================================bool CMciPlay::PutToWindow(RECT rc){ CString lpstrCommand; lpstrCommand.Format("put NOWMUSIC window at %d %d %d %d",rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top); if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0) return true; else return false;}//'======================================================//'获取当前播放进度//'======================================================long CMciPlay::GetMusicPos(){ char RefStr[80]; mciSendString("status NOWMUSIC position", RefStr, 80, 0); return atol(RefStr);}//'======================================================//'设置媒体的当前进度//'======================================================bool CMciPlay::SetMusicPos(long Position){ CString lpstrCommand; lpstrCommand.Format("seek NOWMUSIC to %d",Position); if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0) return true; else return false;}//'======================================================//'暂停播放//'======================================================bool CMciPlay::PauseMusic(){ if(mciSendString("pause NOWMUSIC", NULL, 0, 0)==0) return true; else return false;}//'======================================================//'设置声道//'======================================================bool CMciPlay::SetAudioSource(int AudioSource){ CString lpstrCommand; lpstrCommand="setaudio NOWMUSIC source to "; switch(AudioSource) { case AudioStereo: lpstrCommand+="stereo"; break; case AudioLeft: lpstrCommand+="left"; break; case AudioRight: lpstrCommand+="right"; break; } if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0) return true; else return false;}//'======================================================//'全屏播放//'======================================================bool CMciPlay::PlayFullScreen(){ if(mciSendString("play NOWMUSIC fullscreen", NULL, 0, 0)==0) return true; else return false;}//'=====================================================//'设置声音大小1-1000//'=====================================================bool CMciPlay::SetVolume(int Volume){ CString lpstrCommand; lpstrCommand.Format("setaudio NOWMUSIC volume to %d",Volume); if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0) return true; else return false;}//'=====================================================//'设置播放速度1-2000//'=====================================================bool CMciPlay::SetSpeed(int Speed){ CString lpstrCommand; lpstrCommand.Format("set NOWMUSIC speed %d",Speed); if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0) return true; else return false;}//'====================================================//'静音True为静音,FALSE为取消静音//'====================================================bool CMciPlay::SetAudioOnOff(bool AudioOff){ if(AudioOff) { if(mciSendString("setaudio NOWMUSIC off",NULL,0,0)==0) return true; } else { if(mciSendString("setaudio NOWMUSIC on",NULL,0,0)==0) return true; } return false;}//'====================================================//'是否有画面True为有,FALSE为取消//'====================================================bool CMciPlay::SetWindowShow(bool WindowOff){ if(WindowOff) { if(mciSendString("window NOWMUSIC state show",NULL,0,0)==0) return true; } else { if(mciSendString("window NOWMUSIC state hide",NULL,0,0)==0) return true; } return false;}//'====================================================//'获得当前媒体的状态是不是在播放//'====================================================bool CMciPlay::IsPlaying(){// char RefStr[10]; CString RefStr; if(mciSendString("status NOWMUSIC mode",RefStr.GetBuffer(10), 10, 0)==0) { if(RefStr.Find("playing")>=0||RefStr.Find("播放")>=0) return true; } return false;}//'====================================================//'获得播放窗口的handle//'====================================================HWND CMciPlay::GetWindowHandle(){ char RefStr[80]; mciSendString("status NOWMUSIC window handle", RefStr, 80, 0); return (HWND)atol(RefStr);}//'====================================================//'获取DeviceID//'====================================================MCIDEVICEID GetDeviceID(){ return mciGetDeviceID("NOWMUSIC");}//'====================================================//'处理窗口事件//'====================================================LRESULT CALLBACK MCIWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam){ // HDC hdc; int wmId; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); // MessageBox(NULL,"OK","sd",MB_OK); /*switch(wmId) { default: break; }//*/ break; case WM_LBUTTONUP:return 0; break; case WM_RBUTTONUP:POINT pt; GetCursorPos(&pt); break; case WM_PAINT: break; default:break; } return CallWindowProc(OldProc,hWnd,message,wParam,lParam);}//用来将长路径名转化为短路径名.CString CMciPlay::ToShortPathName(CString SLongPathName){ char strBuffer[_MAX_PATH]; GetShortPathName(SLongPathName,strBuffer,_MAX_PATH); CString m_toDir(strBuffer); return m_toDir; } //#if !defined(AFX_BROWSEDIRDIALOG_H__296DDE5D_7B8A_4413_A768_72FC7ED78A2E__INCLUDED_)//#define AFX_BROWSEDIRDIALOG_H__296DDE5D_7B8A_4413_A768_72FC7ED78A2E__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000// browseDirDialog.h : header file//#include < MMSystem.h >#include < Vfw.h >#include < shlobj.H >/////////////////////////////////////////////////////////////////////////////// CbrowseDirDialog dialogclass CMciPlay{public: CString ToShortPathName(CString SLongPathName);// WNDPROC OldProc; //CBrowseDirDialog(); //virtual ~CBrowseDirDialog(); LPSTR GetDriverID(LPSTR ff); bool OpenMusic(LPSTR FileName,HWND hWnd); bool PlayMusic(); long GetMusicLength(); bool PutToWindow(RECT rc); long GetMusicPos(); bool SetMusicPos(long Position); bool PauseMusic(); bool CloseMusic(); bool SetAudioSource(int AudioSource); bool PlayFullScreen(); bool SetVolume(int Volume); bool SetSpeed(int Speed); bool SetAudioOnOff(bool AudioOff); bool SetWindowShow(bool WindowOff); bool IsPlaying(); HWND GetWindowHandle(); MCIDEVICEID GetDeviceID();// LRESULT CALLBACK MCIWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); bool ShowOpenSave(LPSTR FileName,bool OpenOrSave,HWND hWnd); bool SavePicture(LPSTR FileName,HWND hWnd); /* int DoBrowse(); CString m_Path; //存放返回的路径信息 CString m_InitDir; //初始显示的路径名,默认为桌面 CString m_SelDir; //打开对话框后,默认选中的目录名,缺省为根目录 CString m_Title; //设置对话框中浏览信息的标题,默认为"打开" int m_ImageIndex;*/}; //#endif 上面可以照抄。这是一个控制的:void CMusicDlg::OnReleasedcaptureSliderPlay(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here pMciPlay.PauseMusic (); pMciPlay.SetMusicPos( m_CtrlSliderPlay.GetPos() ); pMciPlay.PlayMusic (); *pResult = 0;} 但是我不是想要抄你的,我想自己学会,再加上我又看不懂你的是什么意思又过了一天还是不会用滑块,5555......我给你看看我的代码,看下我为什么错了,滑块不动:#include "stdafx.h"#include <windows.h>#include <windowsx.h>#include "resource.h"#include "MainDlg.h"#include <commdlg.h>#include "mmsystem.h"#include <commctrl.h>#pragma comment(lib, "Winmm.lib")//-----------------------------------BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE;}BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){ return 0;}int playLength=0;long musicLength=0;void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime){ switch (idEvent) { case 2: { TCHAR strCurrTime[256]; mciSendString("status music position",strCurrTime,255,NULL); playLength=atoi(strCurrTime)/1000; //获取当前播放时间 HWND hSilderTime=GetDlgItem(hwnd,IDC_SLIDER); SendMessage(hSilderTime,TBM_SETPOS,TRUE,playLength); } break; }}void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify){ switch(id) { case IDC_ADD: { TCHAR music[]="c:\\3.mp3";//我故意把一首歌放在C盘的 TCHAR cmp[256]; wsprintf(cmp,"play %s",music); mciSendString(cmp,NULL,0,0); char sPosition[256]; //得到播放文件的长度 mciSendString("Status music length", sPosition, 255,0); musicLength=atol(sPosition); int AllTime=musicLength/1000; //把毫秒转化为秒 HWND hSliderTime=GetDlgItem(hwnd,IDC_SLIDER); //获取滑块的句柄 //设置滑块的范围 SendMessage(hSliderTime,TBM_SETRANGE,1,(LPARAM)MAKELONG(0, AllTime)); //每秒钟设置滑块显示时间进度,并且显示音乐当前播放的时间 SetTimer(hwnd,2,1000,TimerProc); }break; } }void Main_OnClose(HWND hwnd){ EndDialog(hwnd, 0);} 还有我貌似是用C来编程的,不是用C++来编的你的那些算不算是C++的??初学不久,它们我两个分得不是很清楚,是不是有了类和模板就叫做C++的??你的那些 CMusicDlg::OnReleasedcaptureSliderPlay(有两个冒号的是不是就是指那些里面的什么成员来的??是不是?? 多打几个断点不就知道了~~是滑块控件的问题,还是你那个什么mci获取的值的问题,还是timer没跑到什么的。 想让对话框跟着加载图片的大小变化而变化该怎么办 如何获得本程序最前端的窗口是哪一个 请问一个比较简单的问题,大家帮忙! 散分-高中退学从今天投身VC 请问 Web 2.0 有什么新功能 SHBrowseForFolder来选择路径,怎样初始化起始路径为特定的 ? 电信行业 能解释一下吗? 是电子信息? 做什么? 有什么职位? 欢迎up 在OnDraw中,怎样知道参数中的CDC是屏幕的还是打印机的 ? 文件保存的问题 有没有人知道如何用代码设置DCOM的身份验证级别? ActiveX插件被占用,请指教 弹出是否选择窗口
{ unsigned long m_dLength;
int m_wDeviceID;
// char buf[128];
MCI_OPEN_PARMS mciOpen; MCI_STATUS_PARMS mciStatusParms;
MCIERROR mciError;
mciOpen.lpstrElementName=(LPCTSTR)s;//取得文件名
mciError=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpen);//打开文件
m_wDeviceID=mciOpen.wDeviceID;
mciStatusParms.dwItem=MCI_STATUS_LENGTH;
mciSendCommand(MCI_ALL_DEVICE_ID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);//关键,取得长度
m_dLength=mciStatusParms.dwReturn;
// mciSendCommand(m_wDeviceID,MCI_CLOSE,0,NULL);//关闭文件
MusicLength=m_dLength;
return m_dLength;
}
//===================================================================
CSliderCtrl* CSDC=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1); //进度条 CSDC->SetPos((CSDC->GetPos())+1);
//=======================================================================
//音乐播放的循环,随机循环的,全部循环
加一个菜单,可以设置播放模式,如用一个整数区分,,放完一首之后,检查播放模式,
这个是什么意思??
////////////////////////////////////////////////////////////////////// #include "stdafx.h"
#include "MciPlay.h"#include < MMSystem.h >
#include < Vfw.h >
#include < shlobj.H >#pragma comment(lib, "winmm.lib")
//#pragma comment(lib, "Vfw32.lib")#define AudioStereo 0
#define AudioLeft 1
#define AudioRight 2#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif/*
//构造函数
CMciPlay::CMciPlay()
{
} //析构函数
CMciPlay::~CMciPlay()
{
}
*/WNDPROC OldProc;
LRESULT CALLBACK MCIWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
/*'======================================================*\
'根据文件名,确定设备
\'=======================================================*/
LPSTR CMciPlay::GetDriverID(LPSTR ff)
{
char aa[3];
int i;
char bb[3];
int lenff=strlen(ff);
for(i=0;i<3;i++)
{
aa[i]=ff[lenff-3+i];
if(aa[i]>=97||aa[i]<=122)aa[i]-=32;
}
aa[3]=0;
strcpy(bb,"MID");
if(strcmp(aa,bb)==0)return "Sequencer";
strcpy(bb,"RMI");
if(strcmp(aa,bb)==0)return "Sequencer";
strcpy(bb,"IDI");
if(strcmp(aa,bb)==0)return "Sequencer";
strcpy(bb,"WAV");
if(strcmp(aa,bb)==0)return "Waveaudio";
return "MPEGVideo";
}
//=======================================================
//打开MCI设备,FILENAME为文件名,传值代表成功与否
//=======================================================
bool CMciPlay::OpenMusic(LPSTR FileName,HWND hWnd=NULL)
{
CloseMusic();
CString ShortPathName,lpstrCommand;
CString tmpStr=FileName; ShortPathName=ToShortPathName(FileName);
// if(tmpStr.Left(7)=="http://")
// ShortPathName=FileName;
// else
// GetShortPathName(FileName,ShortPathName.GetBuffer(0), 255);
// MessageBox(NULL,ShortPathName.GetBuffer(0),"",MB_OK);
char *DrvID=GetDriverID(ShortPathName.GetBuffer(0));
lpstrCommand.Format("open %s type %s alias NOWMUSIC",ShortPathName.GetBuffer(0), DrvID);
if(strcmp(DrvID,"MPEGVideo")>=0)
{
if(hWnd!=NULL)
lpstrCommand.Format("open %s type %s alias NOWMUSIC parent %d style child",ShortPathName.GetBuffer(0), DrvID,(int)hWnd);
else
lpstrCommand+=" style overlapped ";
}
if( mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0 )
{
OldProc=(WNDPROC)GetWindowLong(GetWindowHandle(),GWL_WNDPROC);
//MCIWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
SetWindowLong( GetWindowHandle(),GWL_WNDPROC,(long)MCIWindowProc );
return true;
} return false;
}
//=======================================================
//关闭MCI设备,FILENAME为文件名,传值代表成功与否
//=======================================================
bool CMciPlay::CloseMusic()
{
if( mciSendString("close NOWMUSIC",NULL, 0,0)==0 )
return true;
else
return false;
}
//'======================================================
//'播放文件
//'======================================================
bool CMciPlay::PlayMusic()
{
//MCIERROR WINAPI mciSendString(LPCSTR lpstrCommand, LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback);
if(mciSendString("play NOWMUSIC", NULL, 0, 0)==0)
return true;
else
return false;
}
//'======================================================
//'获取媒体的长度
//'======================================================
long CMciPlay::GetMusicLength()
{
char RefStr[80];
mciSendString("status NOWMUSIC length", RefStr, 80, 0);
return atol(RefStr);
}
//'======================================================
//'添充画面
//'======================================================
bool CMciPlay::PutToWindow(RECT rc)
{
CString lpstrCommand;
lpstrCommand.Format("put NOWMUSIC window at %d %d %d %d",rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else
return false;
}
//'======================================================
//'获取当前播放进度
//'======================================================
long CMciPlay::GetMusicPos()
{
char RefStr[80];
mciSendString("status NOWMUSIC position", RefStr, 80, 0);
return atol(RefStr);
}
//'======================================================
//'设置媒体的当前进度
//'======================================================
bool CMciPlay::SetMusicPos(long Position)
{
CString lpstrCommand;
lpstrCommand.Format("seek NOWMUSIC to %d",Position);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else
return false;
}
//'======================================================
//'暂停播放
//'======================================================
bool CMciPlay::PauseMusic()
{
if(mciSendString("pause NOWMUSIC", NULL, 0, 0)==0)
return true;
else
return false;
}
//'======================================================
//'设置声道
//'======================================================
bool CMciPlay::SetAudioSource(int AudioSource)
{
CString lpstrCommand;
lpstrCommand="setaudio NOWMUSIC source to ";
switch(AudioSource)
{
case AudioStereo: lpstrCommand+="stereo";
break;
case AudioLeft: lpstrCommand+="left";
break;
case AudioRight: lpstrCommand+="right";
break;
}
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else
return false;
}
//'======================================================
//'全屏播放
//'======================================================
bool CMciPlay::PlayFullScreen()
{
if(mciSendString("play NOWMUSIC fullscreen", NULL, 0, 0)==0)
return true;
else
return false;
}
//'=====================================================
//'设置声音大小1-1000
//'=====================================================
bool CMciPlay::SetVolume(int Volume)
{
CString lpstrCommand;
lpstrCommand.Format("setaudio NOWMUSIC volume to %d",Volume);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else
return false;
}
//'=====================================================
//'设置播放速度1-2000
//'=====================================================
bool CMciPlay::SetSpeed(int Speed)
{
CString lpstrCommand;
lpstrCommand.Format("set NOWMUSIC speed %d",Speed);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else
return false;
}
//'====================================================
//'静音True为静音,FALSE为取消静音
//'====================================================
bool CMciPlay::SetAudioOnOff(bool AudioOff)
{
if(AudioOff)
{
if(mciSendString("setaudio NOWMUSIC off",NULL,0,0)==0)
return true;
}
else
{
if(mciSendString("setaudio NOWMUSIC on",NULL,0,0)==0)
return true;
}
return false;
}
//'====================================================
//'是否有画面True为有,FALSE为取消
//'====================================================
bool CMciPlay::SetWindowShow(bool WindowOff)
{
if(WindowOff)
{
if(mciSendString("window NOWMUSIC state show",NULL,0,0)==0)
return true;
}
else
{
if(mciSendString("window NOWMUSIC state hide",NULL,0,0)==0)
return true;
}
return false;
}
//'====================================================
//'获得当前媒体的状态是不是在播放
//'====================================================
bool CMciPlay::IsPlaying()
{
// char RefStr[10];
CString RefStr;
if(mciSendString("status NOWMUSIC mode",RefStr.GetBuffer(10), 10, 0)==0)
{
if(RefStr.Find("playing")>=0||RefStr.Find("播放")>=0)
return true;
}
return false;
}
//'====================================================
//'获得播放窗口的handle
//'====================================================
HWND CMciPlay::GetWindowHandle()
{
char RefStr[80];
mciSendString("status NOWMUSIC window handle", RefStr, 80, 0);
return (HWND)atol(RefStr);
}
//'====================================================
//'获取DeviceID
//'====================================================
MCIDEVICEID GetDeviceID()
{
return mciGetDeviceID("NOWMUSIC");
}
//'====================================================
//'处理窗口事件
//'====================================================
LRESULT CALLBACK MCIWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
// HDC hdc;
int wmId;
switch (message)
{
case WM_COMMAND: wmId = LOWORD(wParam);
// MessageBox(NULL,"OK","sd",MB_OK);
/*switch(wmId)
{
default:
break;
}//*/
break;
case WM_LBUTTONUP:return 0;
break;
case WM_RBUTTONUP:POINT pt;
GetCursorPos(&pt);
break;
case WM_PAINT: break;
default:break;
}
return CallWindowProc(OldProc,hWnd,message,wParam,lParam);
}
//用来将长路径名转化为短路径名.
CString CMciPlay::ToShortPathName(CString SLongPathName)
{
char strBuffer[_MAX_PATH];
GetShortPathName(SLongPathName,strBuffer,_MAX_PATH);
CString m_toDir(strBuffer);
return m_toDir;
}
//#define AFX_BROWSEDIRDIALOG_H__296DDE5D_7B8A_4413_A768_72FC7ED78A2E__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// browseDirDialog.h : header file
//#include < MMSystem.h >
#include < Vfw.h >
#include < shlobj.H >/////////////////////////////////////////////////////////////////////////////
// CbrowseDirDialog dialogclass CMciPlay
{
public:
CString ToShortPathName(CString SLongPathName);
// WNDPROC OldProc;
//CBrowseDirDialog();
//virtual ~CBrowseDirDialog(); LPSTR GetDriverID(LPSTR ff);
bool OpenMusic(LPSTR FileName,HWND hWnd);
bool PlayMusic();
long GetMusicLength();
bool PutToWindow(RECT rc);
long GetMusicPos();
bool SetMusicPos(long Position);
bool PauseMusic();
bool CloseMusic();
bool SetAudioSource(int AudioSource);
bool PlayFullScreen();
bool SetVolume(int Volume);
bool SetSpeed(int Speed);
bool SetAudioOnOff(bool AudioOff);
bool SetWindowShow(bool WindowOff);
bool IsPlaying();
HWND GetWindowHandle();
MCIDEVICEID GetDeviceID();
// LRESULT CALLBACK MCIWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
bool ShowOpenSave(LPSTR FileName,bool OpenOrSave,HWND hWnd);
bool SavePicture(LPSTR FileName,HWND hWnd);
/* int DoBrowse();
CString m_Path; //存放返回的路径信息
CString m_InitDir; //初始显示的路径名,默认为桌面
CString m_SelDir; //打开对话框后,默认选中的目录名,缺省为根目录
CString m_Title; //设置对话框中浏览信息的标题,默认为"打开"
int m_ImageIndex;
*/
};
//#endif
{
// TODO: Add your control notification handler code here
pMciPlay.PauseMusic ();
pMciPlay.SetMusicPos( m_CtrlSliderPlay.GetPos() );
pMciPlay.PlayMusic ();
*pResult = 0;
}
我给你看看我的代码,看下我为什么错了,滑块不动:
#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
#include <commdlg.h>
#include "mmsystem.h"
#include <commctrl.h>
#pragma comment(lib, "Winmm.lib")//-----------------------------------
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
}
return FALSE;
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
return 0;
}
int playLength=0;
long musicLength=0;
void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
switch (idEvent)
{
case 2:
{
TCHAR strCurrTime[256];
mciSendString("status music position",strCurrTime,255,NULL);
playLength=atoi(strCurrTime)/1000; //获取当前播放时间
HWND hSilderTime=GetDlgItem(hwnd,IDC_SLIDER);
SendMessage(hSilderTime,TBM_SETPOS,TRUE,playLength);
}
break;
}
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_ADD:
{
TCHAR music[]="c:\\3.mp3";//我故意把一首歌放在C盘的
TCHAR cmp[256];
wsprintf(cmp,"play %s",music);
mciSendString(cmp,NULL,0,0); char sPosition[256];
//得到播放文件的长度
mciSendString("Status music length", sPosition, 255,0);
musicLength=atol(sPosition);
int AllTime=musicLength/1000; //把毫秒转化为秒
HWND hSliderTime=GetDlgItem(hwnd,IDC_SLIDER); //获取滑块的句柄
//设置滑块的范围
SendMessage(hSliderTime,TBM_SETRANGE,1,(LPARAM)MAKELONG(0, AllTime)); //每秒钟设置滑块显示时间进度,并且显示音乐当前播放的时间
SetTimer(hwnd,2,1000,TimerProc);
}break;
}
}void Main_OnClose(HWND hwnd)
{
EndDialog(hwnd, 0);
}