VC显示路径的问题
做的是音乐播放器,添加多个文件功能
void Add(HWND hwnd)
{
OPENFILENAME ofn;
char szFile[MAX_PATH];//MAX_PATH操作系统定义的最大路径的长度
ZeroMemory(&ofn,sizeof(ofn));
ofn.lStructSize = sizeof(ofn);//定义结构体的大小,判断是win95还是win2000系统
ofn.lpstrFile = szFile;//
ZeroMemory(szFile,sizeof(szFile)/sizeof(char));
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = TEXT("ALL\0*.*\0mp3\0*.mp3\0wav\0*.wav\0");//过滤器
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if(GetOpenFileName(&ofn))
{
GetShortPathName(szFile,OpenName,sizeof(OpenName)/sizeof(TCHAR));//问题就出自这里,获得的是短路径名,在播放列表里面显示的不完整
//GetLongPathName(szFile,szOpenName,sizeof(szOpenName)/sizeof(TCHAR));//如果添加这行代码的话,显示路径名完整,但播放不了
SendMessage(GetDlgItem(hwnd,IDC_LIST1),LB_ADDSTRING,0,(LPARAM)szOpenName);
//MessageBox(NULL,OpenName,TEXT(""),MB_OK);
int count = SendMessage(GetDlgItem(hwnd,IDC_LIST1),LB_GETCOUNT,0,0);
if(count!=0)
{
SendMessage(GetDlgItem(hwnd,IDC_LIST1),LB_SETCURSEL,count-1,0);//选中播放项
}
}
}
播放音乐
TCHAR cmd1[MAX_PATH];
wsprintf(cmd1,TEXT("play %s"),OpenName);
mciSendString(cmd1,buf,sizeof(buf),NULL);//播放歌曲
怎么个情况,如何解决啊
[解决办法]
如果你路径名中有空格,路径名必须用引号括起来才行,因此"play %s"可能不行,需要"play \"%s\""
[解决办法]
那你用GetLongPathName先发生给窗口。
播放时再通过GetShortPathName把取到的文件名转换下再播放