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

            評論

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

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

            導航

            <2010年4月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            統計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品免费一区二区三区| 好久久免费视频高清| 无码人妻少妇久久中文字幕 | 男女久久久国产一区二区三区| 99久久国产宗和精品1上映| 久久国产精品成人影院| 国内精品久久久久久久影视麻豆| 亚洲午夜福利精品久久| 漂亮人妻被黑人久久精品| 国产精品免费久久| 久久精品国产亚洲77777| 久久黄视频| 精品久久久久久无码专区| 亚洲国产精品成人AV无码久久综合影院 | 久久久无码人妻精品无码| AA级片免费看视频久久| 一本色道久久综合狠狠躁| 久久99国产一区二区三区| 欧美大香线蕉线伊人久久| 久久久久久午夜精品| 国产精品无码久久久久| 久久九九有精品国产23百花影院| 狠狠综合久久AV一区二区三区| 曰曰摸天天摸人人看久久久| 久久成人国产精品| 久久99久久99精品免视看动漫| 人人狠狠综合久久亚洲高清| 91久久精品视频| 天天综合久久久网| 一级做a爱片久久毛片| 亚洲午夜久久久精品影院| 国产精品久久永久免费| 久久久无码人妻精品无码| 久久超乳爆乳中文字幕| 久久精品国产亚洲AV无码麻豆| 少妇高潮惨叫久久久久久| 久久妇女高潮几次MBA| 久久亚洲精品人成综合网| 久久久久久亚洲AV无码专区| 国产精品久久精品| 久久精品九九亚洲精品天堂|