不同於打開文件或保存文件,這兩個只須用OpenFileName和GetOpenFileName、GetSaveFileName,設置相關字段就可以搞定,網上有很多,這裏就不一一贅述了。
當然,選擇文件夾/目錄,網上也有很多,MSDN上也有詳細介紹,但是,不是很熟悉的會用錯,特別是在win32編程中。
這是我的代碼:
網上的說法是用一個變量BROWSEINFO保存用戶選擇的目錄信息,並用SHGetPathFromIDLIST和SHBrowseForFolder打開對話框,但是很多人就直接照抄代碼,但是運行之後發現錯誤有幾十個,幾乎全是變量未定義的
去MSDN上查發現這些函數和類型在#include <shlobj.h>頭文件中,於是把這個頭文件加上,於是我也照做
但是,發現仍然不管用。。。出現的錯誤是與MFC中windows.h文件定義相沖突
這是爲蝦米呢??
於是有這樣一個思路,在win32編程,爲防止與MFC中windows.h相沖突,要加一句#define NO_WIN32_LEAN_AND_MEAN或者去Project/Settings/選擇Not Using MFC
我們再次運行,
error C2065: 'BROWSEINFO' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 'bi'
error C2065: 'bi' : undeclared identifier
error C2228: left of '.hwndOwner' must have class/struct/union ty
error C2228: left of '.pidlRoot' must have class/struct/union typ
error C2228: left of '.pszDisplayName' must have class/struct/uni
error C2228: left of '.lpszTitle' must have class/struct/union ty
error C2228: left of '.ulFlags' must have class/struct/union type
error C2228: left of '.lpfn' must have class/struct/union type
error C2228: left of '.lParam' must have class/struct/union type
error C2228: left of '.iImage' must have class/struct/union type
error C2065: 'SHGetPathFromIDList' : undeclared identifier
error C2065: 'SHBrowseForFolder' : undeclared identifier
error C2065: 'ShellExecute' : undeclared identifier
。。。。
發現仍然有這些錯誤信息
原因是什麼呢??
經過一個時候的反覆運行。。
原因找到了。。
是StdAfx.h頭文件問題
我們必須把這個頭文件放在所有頭文件的最上面