用flash8b.ocx控件写了一个基于对话框的flash播放器,现需要加一个搜索并直接运行当前路径下的某个".swf文件"功能.该功能我写的代码如下:
void CMyFlashDlg::OnSearch() 
{
UpdateData();
if(!m_strfile.GetLength()) 
{AfxMessageBox("please enter your search filename");return ;} WIN32_FIND_DATA fd;
         HANDLE hd=::FindFirstFile((LPCTSTR)(m_strfile+".swf"),&fd);
if(hd==INVALID_HANDLE_VALUE) {return;}
         a=fd.cFileName;
         SwfPlay(&a); 
         while(FindNextFile(hd,&fd))
{
            SwfPlay(&a); 
};
FindClose(hd); 
}
调用的swfPlay函数如下:void CMyFlashDlg::SwfPlay(CString *szFilePath) //播放flash
{
char *chFilePath=NULL;
chFilePath=szFilePath->GetBuffer(szFilePath->GetLength());
m_MyFlash.SetMovie(chFilePath);
m_MyFlash.Play();
m_MyFlash.SetLoop(TRUE);
m_MyFlash.SetBackgroundColor(m_MyFlash.GetBackgroundColor()); 
}编译可以通过,可以运行后flash怎么也播放不起来, 望高手给予帮助,昨晚想得一夜没睡好觉

解决方案 »

  1.   

    你搜索的那段代码我先弄好
    感觉有问题void CMyFlashDlg::OnSearch()
    {
    UpdateData();
    if(!m_strfile.GetLength())
    {AfxMessageBox("please enter your search filename");return ;} WIN32_FIND_DATA fd;
    HANDLE hd=::FindFirstFile((LPCTSTR)(m_strfile+".swf"),&fd);
    if(hd==INVALID_HANDLE_VALUE) {return;}
    a=fd.cFileName;
    SwfPlay(&a);
    while(FindNextFile(hd,&fd))
    {
    SwfPlay(&a);
    };
    FindClose(hd);
      

  2.   

    SwfPlay(CString *szFilePath) //这个传递进去的是一个 CString * 而你用a=fd.cFileName;
        SwfPlay(&a);
    传递进去的是 char ** 我感觉你可以直接把 那个a=a=fd.cFileName;
    直接换成 m_strfile+".swf"
    还有  你为什么搜索到了文件 还要调用
     while(FindNextFile(hd,&fd))
        {
            SwfPlay(&a);
        };
      

  3.   

    我也觉得是参数传递出了问题,可是如果参数匹配错误的话编译器会报错吧,没报错哦.哪个a声明的是CString型.那 &a 传进去刚好和 CString *匹配吧
      

  4.   

    还有  你为什么搜索到了文件 还要调用 
    while(FindNextFile(hd,&fd)) 
        { 
            SwfPlay(&a); 
        }; 这个已经去掉了,因为我看到MSDN上的搜索的例子.说搜索要用FindFirstFile和FindNextFile两个函数,如果照你这样改的话就根本用不到这两个函数哦,我感觉你可以直接把 那个a=a=fd.cFileName; 
    直接换成 m_strfile+".swf"如果这样改的话只是得到了一个文件名而已,并没有得到路径啊
      

  5.   

    如果参数匹配错误的话编译器会报错吧,没报错哦.a声明的是CString型.那 &a 传进去刚好和 CString *匹配吧
      

  6.   

    SwfPlay(CString *szFilePath)是要一个路径而不只是文件名而已.谁很了解文件搜索的算法那就是小菜一碟
      

  7.   

    不好意思,我看错了。参数没问题的。hd这个句柄是否取到了呢?void CMyFlashDlg::SwfPlay(char *szFilePath)换成这样行不行?传参的时候直接传a.GetBuffer()行不行?
      

  8.   

    最终还是得我自己写,公布下我写的结果:void CMyFlashDlg::OnSearch() 
    {
    // TODO: Add your control notification handler code here
        UpdateData();
        if(!m_strfile.GetLength())
        {AfxMessageBox("请输入您要查询的汉字");return ;}  CFileFind ffPath;  
      CString PATH;
      CString b=m_strfile+".swf";
      if (!ffPath.FindFile(b))
      {
         AfxMessageBox("字库中暂时还没有这个汉字");return ;
      }
     
      ffPath.FindNextFile();  
      PATH=ffPath.GetFilePath();
      SwfPlay(&PATH);
    }写是写完了,居然换回一句界面不够美观,想请问下用VC做的东西界面如何美观哦,界面美化是不是得找个美工呢.不想干了.找茬,而且我还是个做开发的新手.可能半个小时做出个flash播放器?
      

  9.   

    使用BCG或则使用第三方换肤软件.还有一个方法是使用贴图技术.QQ就是,使用DirectUI做界面
    半个小时能做出flash播放器,楼主真牛!!
      

  10.   

    各位高人,我自己写了以下代码,问题虽然自己解决了,根本不满意,一旦FindFile(b)的路径下有几千个文件,那这个程序就会长时间停滞,这太可怕了。可windows自带的当前目录搜索就算再多的文件,输入文件名后是立马就找到了,windows是怎么实现的呢?还是不想放弃50分的悬赏啊。谁能帮忙改进下?
      CFileFind ffPath;  
      CString PATH; 
      CString b=m_strfile+".swf"; //m_strfile是输入框映射的变量
      ffPath.FindFile(b);
      ffPath.FindNextFile();  
      PATH=ffPath.GetFilePath(); 
      SwfPlay(&PATH);