• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            VC如何得到一個文件夾的路徑

            VC中沒有現成的函數來選擇一個文件夾,但這是經常會用到的,怎么辦?
            自動動手,豐衣足食!

            使用SHBrowseForFolder,代碼如下:

            #include
              
            int SelFolder(HWND hParent, CString &strFolder)
            {
                strFolder.Empty();
             
                LPMALLOC lpMalloc;
             
                if (::SHGetMalloc(&lpMalloc) != NOERROR) return 0;
             
                char szDisplayName[_MAX_PATH];
                char szBuffer[_MAX_PATH];
                BROWSEINFO browseInfo;
                browseInfo.hwndOwner = hParent;
                browseInfo.pidlRoot = NULL; // set root at Desktop
                browseInfo.pszDisplayName = szDisplayName;
                browseInfo.lpszTitle = "Select a folder";
                browseInfo.ulFlags = BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS;
                browseInfo.lpfn = NULL;
                browseInfo.lParam = 0;
             
                LPITEMIDLIST lpItemIDList;
                if ((lpItemIDList = ::SHBrowseForFolder(&browseInfo)) != NULL)
                {
                    // Get the path of the selected folder from the    item ID list.
                    if (::SHGetPathFromIDList(lpItemIDList, szBuffer))
                    {
                        // At this point, szBuffer contains the path the user chose.
                        if (szBuffer[0] == ´\0´) return 0;
             
                        // We have a path in szBuffer! Return it.
                        strFolder = szBuffer;
                        return 1;
                    }
                    else return 1; // strResult is empty
             
                    lpMalloc->Free(lpItemIDList);
                    lpMalloc->Release();
                }
               
             return 1;
            }

             

            //////調用:

            void CMusic1Dlg::OnOK()
            {
             // TODO: Add extra validation here
             CString str;

             HWND m_hWnd = GetSafeHwnd();
             
             SelFolder(m_hWnd,str);

             m_list.AddString(str);
            // CDialog::OnOK();
            }

            //------------------------------------------------------------------------------------------------------

            //_________________________________________________________________

            “選擇文件夾”對話框的封裝


            我們經常需要用到“選擇文件夾”對話框,相應的API已經很好用,但稍嫌麻煩,所以我專門將其封裝了一下,力求一步到位。

            函數封裝如下:
            /*****************************************************************
            ** 函數名:GetPath
            ** 輸 入: 無
            ** 輸 出: CString strPath
            **        strPath非空, 表示用戶選擇的文件夾路徑
            **        strPath為空, 表示用戶點擊了“取消”鍵,取消選擇
            ** 功能描述:顯示“選擇文件夾”對話框,讓用戶選擇文件夾
            ****************************************************************/

            CString GetPath()
            {
             CString strPath = "";
             BROWSEINFO bInfo;
             ZeroMemory(&bInfo, sizeof(bInfo));
             bInfo.hwndOwner = m_hWnd;
             bInfo.lpszTitle = _T("請選擇路徑: ");
             bInfo.ulFlags = BIF_RETURNONLYFSDIRS;   
             
             LPITEMIDLIST lpDlist; //用來保存返回信息的IDList
             lpDlist = SHBrowseForFolder(&bInfo) ; //顯示選擇對話框
             if(lpDlist != NULL)  //用戶按了確定按鈕
             {
              TCHAR chPath[255]; //用來存儲路徑的字符串
              SHGetPathFromIDList(lpDlist, chPath);//把項目標識列表轉化成字符串
              strPath = chPath; //將TCHAR類型的字符串轉換為CString類型的字符串
             }
             return strPath;
            }

            調用時只需要用到以下代碼:
            CString strPath = GetPath();
            則strPath為用戶選擇的文件夾路徑。如果用戶點擊了對話框的取消鍵,則strPath為空字符串("");

            posted on 2009-03-14 10:02 wrh 閱讀(5226) 評論(1)  編輯 收藏 引用

            評論

            # re: VC如何得到一個文件夾的路徑[未登錄] 2010-05-11 22:26 旺旺

            我對CString GetPath()封裝函數進行單步調試后,發現
            lpDlist = SHBrowseForFolder(&bInfo) ; //顯示選擇對話框
            上面這行代碼并沒有跳出“選擇對話框”
            我想請問下博主原因是什么,望博主賜教!  回復  更多評論   

            導航

            <2010年8月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产情侣久久久久aⅴ免费| 99久久国产主播综合精品| 久久久久国产精品嫩草影院| 欧美精品乱码99久久蜜桃| 久久精品无码专区免费东京热| 国产一级做a爰片久久毛片| 久久涩综合| 99国产欧美精品久久久蜜芽 | 99久久免费国产特黄| 国产综合免费精品久久久| 人妻无码精品久久亚瑟影视| 99精品久久久久久久婷婷| 精品伊人久久大线蕉色首页| 亚洲午夜久久影院| 少妇久久久久久久久久| 色综合合久久天天给综看| 久久久久一区二区三区| 少妇高潮惨叫久久久久久| 香港aa三级久久三级老师2021国产三级精品三级在 | 日韩av无码久久精品免费| 国产一区二区三精品久久久无广告| 中文无码久久精品| 一本久久a久久精品综合香蕉| 久久久久中文字幕| 久久不射电影网| 久久国产精品99精品国产987| 成人久久免费网站| 亚洲色大成网站WWW久久九九| 久久精品国产72国产精福利| 99久久综合狠狠综合久久| 亚洲综合久久综合激情久久| 99久久无码一区人妻a黑| 久久久久国产精品熟女影院| 一本久道久久综合狠狠爱| 伊人久久大香线蕉综合网站| 色综合久久88色综合天天 | 午夜精品久久久久久影视riav| 久久免费国产精品| 久久精品一区二区三区AV| 亚洲午夜久久久影院伊人| 丰满少妇高潮惨叫久久久|