API之路1

不同於打開文件或保存文件,這兩個只須用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頭文件問題

我們必須把這個頭文件放在所有頭文件的最上面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章