• <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 閱讀(5234) 評論(1)  編輯 收藏 引用

            評論

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

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

            導航

            <2009年3月>
            22232425262728
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            天天躁日日躁狠狠久久| 久久人妻无码中文字幕| 99久久夜色精品国产网站| 久久AⅤ人妻少妇嫩草影院| 久久频这里精品99香蕉久| 亚洲乱码精品久久久久..| 波多野结衣中文字幕久久 | 亚洲国产婷婷香蕉久久久久久| 手机看片久久高清国产日韩| 久久婷婷国产剧情内射白浆 | 伊人久久综合热线大杳蕉下载| 中文字幕久久亚洲一区| 99久久精品影院老鸭窝| 狼狼综合久久久久综合网| 欧美激情精品久久久久久久九九九| 精品国产VA久久久久久久冰| 亚洲а∨天堂久久精品| 精品久久久久久无码国产| 99精品久久精品一区二区| 一本色道久久HEZYO无码| 少妇人妻综合久久中文字幕| 亚洲国产天堂久久综合网站| 久久ww精品w免费人成| 三上悠亚久久精品| 久久人人添人人爽添人人片牛牛 | 国内精品伊人久久久久| 无遮挡粉嫩小泬久久久久久久| 久久久久亚洲AV成人网人人网站| 久久93精品国产91久久综合| 国产精品午夜久久| 久久精品国产精品亚洲人人 | 伊人久久五月天| 国产99久久久国产精品小说| 99久久国产综合精品成人影院| 久久99精品综合国产首页| 丁香五月网久久综合| 国产精品久久久福利| 狠狠色伊人久久精品综合网| 精品久久综合1区2区3区激情 | 性做久久久久久久久老女人| 一级a性色生活片久久无少妇一级婬片免费放|