• <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) ; //顯示選擇對話框
            上面這行代碼并沒有跳出“選擇對話框”
            我想請問下博主原因是什么,望博主賜教!  回復  更多評論   

            導航

            <2008年4月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            統計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            午夜精品久久久久久影视riav| 性欧美丰满熟妇XXXX性久久久| 亚洲嫩草影院久久精品| 777久久精品一区二区三区无码| 久久久久一本毛久久久| 久久99热这里只有精品66| 性高湖久久久久久久久| 久久精品国产精品亜洲毛片 | 久久99精品国产麻豆宅宅 | 久久经典免费视频| 精品永久久福利一区二区| 久久久久免费视频| 久久久精品2019免费观看| 日批日出水久久亚洲精品tv| 99久久99久久精品免费看蜜桃| 日韩va亚洲va欧美va久久| 久久综合丝袜日本网| 99久久国产综合精品女同图片| 久久久久久亚洲精品不卡| 99精品久久久久中文字幕| 亚洲级αV无码毛片久久精品| 久久久久无码精品| 色综合合久久天天综合绕视看 | 久久久噜噜噜久久中文字幕色伊伊| 亚洲va久久久噜噜噜久久狠狠| 久久久久亚洲精品男人的天堂| 国产成人综合久久精品尤物| 久久久亚洲欧洲日产国码aⅴ| 中文精品99久久国产 | 国产欧美久久一区二区| 亚洲欧美日韩中文久久| 亚洲精品无码久久不卡| 亚洲伊人久久综合影院| 亚洲国产精品无码久久久久久曰| 久久午夜综合久久| 久久久国产视频| 国内精品伊人久久久久777| 久久www免费人成看片| 一本色道久久99一综合| 久久精品国产99久久无毒不卡| AAA级久久久精品无码片|