C++ 打開(kāi)選擇文件夾對(duì)話框選擇目錄的操作
需要添加頭文件:
#ifdef WIN32 #include <shlobj.h> #endif
調(diào)用文件對(duì)話框選擇目錄:
// 選擇目錄
void CustomInstalWndViewCtrl::OnSigBtnSelectInstallDir()
{
BROWSEINFO bi;
bi.hwndOwner = NULL;
bi.pidlRoot = CSIDL_DESKTOP;//文件夾的根目錄,此處為桌面
bi.pszDisplayName = NULL;
bi.lpszTitle = NULL;//顯示位于對(duì)話框左上部的提示信息
bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;//有新建文件夾按鈕
bi.lpfn = NULL;
bi.iImage = 0;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);//調(diào)用選擇對(duì)話框
if (pidl == NULL)
{
std::cout << "沒(méi)有選擇目錄" << std::endl;
return;
}
TCHAR strFolder[MAX_PATH];
SHGetPathFromIDList(pidl, strFolder);
std::string sFolder = StringUtil::WStringToString(strFolder);
}
補(bǔ)充:c++ MFC選擇文件夾
void openDir(){
//選擇文件夾
string _Path,root;
TCHAR szDir[MAX_PATH];
BROWSEINFO bi;
ITEMIDLIST *pidl;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szDir;//這個(gè)是輸出緩沖區(qū)
bi.lpszTitle = _T("文件夾:"); //標(biāo)題
bi.ulFlags = BIF_NEWDIALOGSTYLE;//使用新的界面,在win7中效果較好//BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
pidl = SHBrowseForFolder(&bi);//彈出對(duì)話框
if (pidl == NULL)//點(diǎn)了取消,或者選擇了無(wú)效的文件夾則返回NULL
return;
if (SHGetPathFromIDList(pidl, szDir)) {
int length = WideCharToMultiByte(CP_ACP, 0, szDir, -1, NULL, 0, NULL, NULL);
char ch[] = "";
WideCharToMultiByte(CP_ACP, 0, szDir, -1, ch, length, NULL, NULL);
root = string(ch);
}
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
C++?中如何結(jié)束?while?(cin>>str)?的輸入
這篇文章主要介紹了C++?中如何結(jié)束?while?(cin>>str)?的輸入,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
mfc入門教程之實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器
這篇文章主要介紹了mfc入門教程,手把手教你如何開(kāi)發(fā)一個(gè)簡(jiǎn)單的計(jì)算器,需要的朋友可以參考下2019-04-04
C++超詳細(xì)講解函數(shù)參數(shù)的默認(rèn)值
在C++中,定義函數(shù)時(shí)可以給形參指定一個(gè)默認(rèn)的值,這樣調(diào)用函數(shù)時(shí)如果沒(méi)有給這個(gè)形參賦值(沒(méi)有對(duì)應(yīng)的實(shí)參),那么就使用這個(gè)默認(rèn)的值。也就是說(shuō),調(diào)用函數(shù)時(shí)可以省略有默認(rèn)值的參數(shù)2022-05-05
C語(yǔ)言用遞歸函數(shù)對(duì)素?cái)?shù)進(jìn)行判斷流程
素?cái)?shù)判斷是編程語(yǔ)言學(xué)習(xí)過(guò)程中一個(gè)老生常談的話題,而它的實(shí)現(xiàn)也有多種算法,包括經(jīng)典的試除法(以及試除法的幾種優(yōu)化),進(jìn)階的素?cái)?shù)表篩選法,埃拉托斯特尼篩法和歐拉篩法(以及它們的優(yōu)化)等。對(duì)以上算法感興趣的朋友們,不妨搜索“素?cái)?shù)判斷的N種境界”來(lái)學(xué)習(xí)了解2022-09-09
C++ 中的new 和 delete 運(yùn)算符及new和malloc的區(qū)別解析
在C++中,又引出了一個(gè)新玩法:new 和 delete,在C++中,new是用來(lái)動(dòng)態(tài)開(kāi)辟內(nèi)存的,delete是用來(lái)釋放我們所動(dòng)態(tài)開(kāi)辟的內(nèi)存C++中的new和delete運(yùn)算符及new和malloc的區(qū)別解析,感興趣的朋友跟隨小編一起看看吧2024-11-11
C語(yǔ)言函數(shù)調(diào)用的三種實(shí)現(xiàn)方法實(shí)例
C語(yǔ)言中函數(shù)的調(diào)用主要有如下三種方法,直接調(diào)用,函數(shù)指針調(diào)用,函數(shù)指針傳遞調(diào)用其中后兩種本質(zhì)一樣,但在有無(wú)返回值時(shí)還稍有差別,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言函數(shù)調(diào)用的三種實(shí)現(xiàn)方法,需要的朋友可以參考下2022-01-01
C++實(shí)現(xiàn)拷貝構(gòu)造函數(shù)的方法詳解
拷貝構(gòu)造函數(shù)是構(gòu)造函數(shù)的一個(gè)重載,因此顯式的定義了拷貝構(gòu)造,那么編譯器也不再默認(rèn)生成構(gòu)造函數(shù)。本文主要介紹了C++實(shí)現(xiàn)拷貝構(gòu)造函數(shù)的方法,需要的可以參考一下2022-09-09

