解决方案 »

  1.   

    指定OFN_ENABLEINCLUDENOTIFY,这样在打开一个目录之前,你的对话框会收到CDN_INCLUDEITEM消息,你可以处理这个消息来通知对话框是否包含一个文件。
    Vista版本的文件对话框不支持这个消息。
      

  2.   

    后缀名如果一样,版本信息写在文件内部,不知道如何过滤扩展名不一样可以用下面方法
    CString str;
    str="BMP FILE(*.bmp)|*.bmp|JPG FILE(*.jpg)|*.jpg||"; CFileDialog dlg(TRUE, NULL, NULL, NULL, str);
    dlg.DoModal();
      

  3.   

    CFileDialogEx是派生自CFileDialog的类
    void CFileDialogEx::OnFolderChange()
    {
        // TODO: Add your specialized code here and/or call the base class
        CWnd *pWnd = NULL;
        pWnd = GetWindow(GW_HWNDFIRST);
        TCHAR szClassName[MAX_PATH] = {};
        if(pWnd)
        {
            do
            {
                GetClassName(pWnd->m_hWnd, szClassName,MAX_PATH);
                if(_tcscmp(szClassName, _T("SHELLDLL_DefView")) == 0)
                {
                    //获取文件夹路径
                    CString strPath;
                    strPath = GetFolderPath();
                    CListCtrl *pListCtrl = (CListCtrl *)pWnd->GetDlgItem(0x00000001);
                    int nTotal = pListCtrl->GetItemCount();
                    for(int i = 0; i < nTotal; i++)
                    {
                        //下面是获取文件名,判断如果不是想要的文件就删除
                        CString strItem = pListCtrl->GetItemText(0, 0);
                        pListCtrl->DeleteItem(0);
                    }
                    break;
                }
            }while(pWnd = pWnd->GetWindow(GW_HWNDNEXT));
        }
        CFileDialog::OnFolderChange();
    }
    如果你还想通过切换下面后缀选择的combobox的事件的话,那可以在CFileDialogEx中处理CBN_SELCHANGE等消息,在这消息里添加上面的代码
      

  4.   

     //下面是获取文件名,判断如果不是想要的文件就删除
    CString strItem = pListCtrl->GetItemText(0, 0);
    pListCtrl->DeleteItem(0);这里就可以通过获取的文件夹和文件名来组合成文件路径,从而得到文件的信息
      

  5.   

    大哥,按照你的方法还是没有办法得到,无法进入这个if语句了。
                if(_tcscmp(szClassName, _T("SHELLDLL_DefView")) == 0)
                {
                    //获取文件夹路径
                    CString strPath;
                    strPath = GetFolderPath();
                    CListCtrl *pListCtrl = (CListCtrl *)pWnd->GetDlgItem(0x00000001);
                    int nTotal = pListCtrl->GetItemCount();
                    for(int i = 0; i < nTotal; i++)
                    {
                        //下面是获取文件名,判断如果不是想要的文件就删除
                        CString strItem = pListCtrl->GetItemText(0, 0);
                        pListCtrl->DeleteItem(0);
                    }
                    break;
                }
      

  6.   

    可能吧!我用到Win7系统,VS2010
      

  7.   

    Windows 7的文件对话框用的不是list control。
      

  8.   

    用spy++看看是那个控件是什么类型了