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

            評論

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

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

            導航

            <2010年10月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲伊人久久大香线蕉苏妲己| 亚洲中文字幕伊人久久无码| 久久久久久精品久久久久| 久久福利资源国产精品999| 久久99九九国产免费看小说| 亚洲AV无一区二区三区久久 | 久久婷婷五月综合色99啪ak| 国产精品久久久天天影视香蕉| 日本精品一区二区久久久| 2020久久精品亚洲热综合一本| 久久精品国产清高在天天线| 国产真实乱对白精彩久久| 久久久国产精华液| 久久精品无码一区二区三区免费 | 久久精品无码专区免费青青| 国产福利电影一区二区三区久久老子无码午夜伦不| 99久久精品免费看国产一区二区三区| 青春久久| 九九久久精品无码专区| 久久综合88熟人妻| 综合久久精品色| 久久久艹| 91精品国产91久久久久久蜜臀| 精品国产乱码久久久久久人妻 | 欧美亚洲国产精品久久| 久久精品中文字幕一区| 久久久青草久久久青草| 久久综合综合久久综合| 2021国产精品午夜久久| 久久久久久午夜精品| 亚洲国产成人精品女人久久久 | 亚洲午夜精品久久久久久app| 亚洲综合精品香蕉久久网97 | 久久水蜜桃亚洲av无码精品麻豆| 一级做a爰片久久毛片毛片| 久久久精品国产Sm最大网站| 91精品国产高清久久久久久91| 亚洲一区二区三区日本久久九| 国产精品熟女福利久久AV| 国产真实乱对白精彩久久| 久久久久亚洲精品男人的天堂|