写播放器,添加多个音乐文件能够实现,编译都通过,但是不能播放了,我把代码贴一下,大家帮个忙
下面的代码是播放器上面已经有了音乐列表,
int iCount = SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETCOUNT, 0, 0);//文件的个数
SendMessage(GetDlgItem(hwnd,IDC_LIST1), LB_SETCURSEL, iCount-1, 0);//指向最后一个文件
char J[MAX];
int i = SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETCURSEL, 0, 0);//选定当前的文件
SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETTEXT, i,(LPARAM)J);//将文件地址复制到缓冲区
GetShortPathName(J,OpenName,sizeof(OpenName)/sizeof(char));//获得地址我定义的OpenName是全局变量,调试之后发现OpenName中是空的,怎么回事啊?播放歌曲函数
char cmd1[MAX];
wsprintf(cmd1,"play %s",OpenName);
mciSendString(cmd1,buf,sizeof(buf),NULL);//播放歌曲 大家帮忙看看,不胜感激!
下面的代码是播放器上面已经有了音乐列表,
int iCount = SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETCOUNT, 0, 0);//文件的个数
SendMessage(GetDlgItem(hwnd,IDC_LIST1), LB_SETCURSEL, iCount-1, 0);//指向最后一个文件
char J[MAX];
int i = SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETCURSEL, 0, 0);//选定当前的文件
SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETTEXT, i,(LPARAM)J);//将文件地址复制到缓冲区
GetShortPathName(J,OpenName,sizeof(OpenName)/sizeof(char));//获得地址我定义的OpenName是全局变量,调试之后发现OpenName中是空的,怎么回事啊?播放歌曲函数
char cmd1[MAX];
wsprintf(cmd1,"play %s",OpenName);
mciSendString(cmd1,buf,sizeof(buf),NULL);//播放歌曲 大家帮忙看看,不胜感激!
发现不了问题啊,LZ还是debug调试,查看调用堆栈吧~
void Add(HWND hwnd)
{
OPENFILENAME ofn;
TCHAR szOpenFileNames[80*MAX_PATH];
TCHAR szPath[MAX_PATH];
TCHAR* p;
int nLen = 0;
ZeroMemory( &ofn, sizeof(ofn) );
ofn.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT | OFN_OVERWRITEPROMPT;
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szOpenFileNames;
ofn.nMaxFile = sizeof(szOpenFileNames);
ofn.lpstrFile[0] = '\0';
ofn.lpstrFilter = TEXT("All Files(*.*)\0*.*\0");
if( GetOpenFileName( &ofn ) )
{
//把第一个文件名前的复制到szPath,即:
//如果只选了一个文件,就复制到最后一个'\'
//如果选了多个文件,就复制到第一个NULL字符
lstrcpyn(szPath, szOpenFileNames, ofn.nFileOffset);
//当只选了一个文件时,下面这个NULL字符是必需的.
//这里不区别对待选了一个和多个文件的情况
szPath[ ofn.nFileOffset ] = '\0';
nLen = lstrlen(szPath);
if( szPath[nLen-1] != '\\' ) //如果选了多个文件,则必须加上'\\'
{
lstrcat(szPath, TEXT("\\"));
}
p = szOpenFileNames + ofn.nFileOffset; //把指针移到第一个文件
ZeroMemory(szFileName, sizeof(szFileName));
while( *p )
{
ZeroMemory(szFileName,sizeof(szFileName));
lstrcat(szFileName, szPath); //给文件名加上路径
lstrcat(szFileName, p); //加上文件名
lstrcat(szFileName, TEXT("\n")); //换行
SendDlgItemMessage(hwnd,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)szFileName);
p += lstrlen(p) +1; //移至下一个文件
//清空szFileName的内存9
}
int iCount = SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETCOUNT, 0, 0);//文件的个数
SendMessage(GetDlgItem(hwnd,IDC_LIST1), LB_SETCURSEL, iCount-1, 0);//指向最后一个文件
char J[MAX];
int i = SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETCURSEL, 0, 0);//选定当前的文件
SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETTEXT, i,(LPARAM)J);//将文件地址复制到缓冲区
GetShortPathName(J,OpenName,sizeof(OpenName)/sizeof(char));//获得地址 }
}