在win98中添加设备驱动程序时,系统会弹出一个对话框让我们选择inf文件的目录,
我想问大家,有没有这样一个系统调用(就象选择文件对话框一样)选择目录。不要
告诉我让我手做一个,因为我不想那样。

解决方案 »

  1.   

    没有,只能自己继承一个CCommonDialog重新做
      

  2.   

    ITEMIDLIST* pilist;
    BROWSEINFO bi;
    bi.hwndOwner = this->m_hWnd;
    bi.pidlRoot = NULL;
    bi.pszDisplayName = NULL;
    bi.lpszTitle = "标题";
    bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS;
    bi.lpfn = NULL; pilist = SHBrowseForFolder(&bi); //show select folder dialog

    if( pilist == NULL ) return ""; //pressed cancel button char chPath[MAX_PATH];
    SHGetPathFromIDList(pilist,chPath); //get folder name from ITEMIDLIST
    CString strPash = chPath;
      

  3.   

    当然有
    就是SHGetPathFromIDList
    我以前花了好久才找到的,这是我当时的一点源程序!
    请你结贴好吗:)void CEditSendItem::OnBrowseButton() 
    {
    char szDisplayName[MAX_PATH];
    BROWSEINFO bi;
    ITEMIDLIST *temp; SHGetFolderLocation(this->m_hWnd , CSIDL_DESKTOP, NULL, NULL,&temp); bi.hwndOwner      = this->m_hWnd ;
    bi.pidlRoot       = temp;
    bi.pszDisplayName = szDisplayName;
    bi.lpszTitle      = "请选择数据源路径";
    bi.ulFlags        = BIF_RETURNONLYFSDIRS;
    bi.lpfn           = NULL;
    bi.lParam         = 0;
    bi.iImage         = 0; temp=SHBrowseForFolder(&bi);
    SHGetPathFromIDList(temp, szDisplayName);
    m_proPath = szDisplayName;
    m_editProperty.SetWindowText (m_proPath);
    }
      

  4.   

    我把SHBrowseForFolder封装成一个类了,哧哧,DoModal()后用GetPath()就取得路径了。class CFolderDialog
    {
    public:
    LPCSTR GetPath();
    virtual int DoModal( );
    CFolderDialog();
    protected:
    char m_szPath[MAX_PATH];
    };CFolderDialog::CFolderDialog()
    {
    //清空路径字符串
    memset(m_szPath,0,sizeof(m_szPath));
    }  int CFolderDialog::DoModal()
    {
    LPITEMIDLIST pilist = NULL;
    BROWSEINFO bi;
    bi.hwndOwner = NULL ;
    bi.pidlRoot = NULL ;
    bi.pszDisplayName = new char[MAX_PATH];
    bi.lpszTitle = "Select Folder";
    bi.ulFlags = BIF_RETURNONLYFSDIRS; // Folder only
    bi.lpfn  = NULL ;
    bi.lParam = NULL ;
    bi.iImage = NULL ; pilist = SHBrowseForFolder ( &bi ) ;
    BOOL b = false;
    if ( pilist )
    b = SHGetPathFromIDList(pilist,m_szPath);
    USES_CONVERSION ; delete[] bi.pszDisplayName ;    LPMALLOC pMalloc = NULL;
        HRESULT hr = SHGetMalloc(&pMalloc);
    if ( pilist )
    pMalloc->Free ( pilist ) ;
    pMalloc->Release ( ) ; return b;
    }LPCSTR CFolderDialog::GetPath()
    {
    return m_szPath;
    }