首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC显示路径的有关问题

2012-09-15 
VC显示路径的问题做的是音乐播放器,添加多个文件功能void Add(HWND hwnd){OPENFILENAME ofnchar szFile[M

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把取到的文件名转换下再播放

热点排行