VisualC++(VC)中“選擇文件夾”對(duì)話框的程序的編寫(xiě)_第1頁(yè)
VisualC++(VC)中“選擇文件夾”對(duì)話框的程序的編寫(xiě)_第2頁(yè)
VisualC++(VC)中“選擇文件夾”對(duì)話框的程序的編寫(xiě)_第3頁(yè)
VisualC++(VC)中“選擇文件夾”對(duì)話框的程序的編寫(xiě)_第4頁(yè)
VisualC++(VC)中“選擇文件夾”對(duì)話框的程序的編寫(xiě)_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Visual C+(VC) 中選擇文件夾”對(duì)話框的程序的編寫(xiě)2010-04-1001:07 A.M.在實(shí)際的MFC編程當(dāng)中,常常需要彈出對(duì)話框選擇文件、選擇目錄等操作,對(duì)于選擇文件,用CFileDialog就可以很簡(jiǎn)單的解決,而對(duì)于選擇目錄,則稍稍需要多一些步驟,需要自己創(chuàng)建Dialog。首先創(chuàng)建如下的對(duì)話框,并為它創(chuàng)建類Dialog,在Dialog頭文件中添加保存目錄名的變量CStringm_strPath,然后為編輯框右邊的按鈕添加消息響應(yīng)函數(shù)On Butt on Browser。,并添加如下代碼。void CDialog:O nButto nBrowser()/ TODO: Add yo

2、ur control notification handler code hereUpdateData(TRUE);char szDirMAX_PATH;BROWSEINFO bi;ITEMIDLIST *pidl;bi.hw ndOw ner = this->m_hWnd; /指定父窗口,在對(duì)話框顯示期間,父窗口將被禁用bi.pidlRoot = NULL;/如果指定NULL,就以 桌面”為根bi.pszDisplayName = szDir;bi.lpszTitle ="請(qǐng)選擇目錄”;這一行將顯示在對(duì)話框的頂端bi.ulFlags = BIF_STATUSTEXT | BI

3、F_USENEWUI | BIF_RETURNONLYFSDIRS;bi.lpfn = NULL;bi.lParam = 0;bi.iImage = 0;pidl = SHBrowseForFolder(&bi);if(pidl = NULL) retur n;if(!SHGetPathFromlDList(pidl, szDir) return;else m_strPath = szDir;UpdateData(FALSE);當(dāng)程序啟動(dòng)起來(lái)的時(shí)候,點(diǎn)擊按鈕,就會(huì)彈出如下的選擇目錄的對(duì)話框Visual C+(VC)中,BROWSEINFO 結(jié)構(gòu)中包含有用戶選中目錄的重要信息。BROWS

4、EINFO 結(jié)構(gòu)定義typedef struct_browse infoHWNDhwn dOw ner;LPCITEMIDLIST pidlRoot;LPSTR pszDisplayName;LPCSTR lpszTitle;UINT ulFlags;BFFCALLBACK lpfn;LPARAM lParam;int iImage;BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;成員變量hwndOwner :瀏覽文件夾對(duì)話框的父窗體句柄。pidlRoot : ITEMIDLIST結(jié)構(gòu)的地址,包含瀏覽時(shí)的初始根目錄,而且只有被指定的目錄和其子目 錄才顯示在瀏覽文件夾

5、對(duì)話框中。該成員變量可以是NULL,在此時(shí)桌面目錄將被使用。pszDisplayName :用來(lái)保存用戶選中的目錄字符串的內(nèi)存地址(緩沖區(qū))。該緩沖區(qū)的大小缺省是 定義的MAX_PATH常量宏。lpszTitle :該瀏覽文件夾對(duì)話框?qū)υ捒虻娘@示文本,用來(lái)提示該瀏覽文件夾對(duì)話框的功能、作用和 目的。ulFlags :該標(biāo)志位描述了對(duì)話框的選項(xiàng)。它可以為0,也可以是以下常量的任意組合:BIF_BROWSEFORCOMPUTER :返回計(jì)算機(jī)名。除非用戶選中瀏覽器中的一個(gè)計(jì)算機(jī)名,否則 該對(duì)話框中的OK ”按鈕為灰色。BIF_BROWSEFORPRINTER :返回打印機(jī)名。除非選中一個(gè)打印機(jī)名,

6、否則OK ”按鈕為灰色。BIF_BROWSEINCLUDEFILES :瀏覽器將顯示目錄,同時(shí)也顯示文件。 BIF_DONTGOBELOWDOMAIN :在樹(shù)形視窗中,不包含域名底下的網(wǎng)絡(luò)目錄結(jié)構(gòu)。BIF_EDITBOX :瀏覽對(duì)話框中包含一個(gè)編輯框,在該編輯框中用戶可以輸入選中項(xiàng)的名字。BIF_RETURNFSANCESTORS :返回文件系統(tǒng)的一個(gè)節(jié)點(diǎn)。僅僅當(dāng)選中的是有意義的節(jié)點(diǎn)時(shí), OK ”按鈕才可以使用。BIF_RETURNONLYFSDIRS :僅僅返回文件系統(tǒng)的目錄。例如:在瀏覽文件夾對(duì)話框中,當(dāng)選中 任意一個(gè)目錄時(shí),該 OK ”按鈕可用,而當(dāng)選中 我的電腦”或網(wǎng)上鄰居”等非有意義

7、的節(jié)點(diǎn)時(shí),OK”按鈕為灰色。BIF_STATUSTEXT :在對(duì)話框中包含一個(gè)狀態(tài)區(qū)域。通過(guò)給對(duì)話框發(fā)送消息使回調(diào)函數(shù)設(shè)置狀態(tài) 文本。BIF_VALIDATE :當(dāng)沒(méi)有BIF_EDITBOX標(biāo)志位時(shí),該標(biāo)志位被忽略。如果用戶在編輯框中輸入的 名字非法,瀏覽對(duì)話框?qū)l(fā)送 BFFM_VALIDATEFAILED消息給回調(diào)函數(shù)。Ipfn :應(yīng)用程序定義的瀏覽對(duì)話框回調(diào)函數(shù)的地址。當(dāng)對(duì)話框中的事件發(fā)生時(shí),該對(duì)話框?qū)⒄{(diào)用回 調(diào)函數(shù)。該參數(shù)可用為 NULL。lParam :對(duì)話框傳遞給回調(diào)函數(shù)的一個(gè)參數(shù)指針。ilmage :與選中目錄相關(guān)的圖像。該圖像將被指定為系統(tǒng)圖像列表中的索引值。Win dows S

8、hell的一個(gè)功能在于管理并提供方法存取系統(tǒng)中的眾多對(duì)像,這些對(duì)像包括了文件,網(wǎng)路上的計(jì)算機(jī),控制面板程序,回收站等等,為了識(shí)別每一個(gè)對(duì)像,Windows Shell使用了 Item ID來(lái)表示它們,而Iten ID Lists用來(lái)表示一個(gè)對(duì)像的路徑。所以,ITEMID和ITEMIDLIST的關(guān)系類似于文 件名和路徑的關(guān)系。如果只對(duì)文件系統(tǒng)而言的話,ITEMIDLIST可以看成是路徑的另一中表示法,Windows Shell也提供了函數(shù)來(lái)進(jìn)行轉(zhuǎn)化。如果SHBrowseForFolder 函數(shù)返回的 ITEMIDLIST 結(jié)構(gòu)指針不為 NULL,就可以使用 SHGetPathFromIDList

9、 函數(shù)取得存儲(chǔ)于ITEMIDLIST結(jié)構(gòu)指針中的路徑信息。SHGetPathFromIDList 函數(shù)的原型如下:WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(LPCITEMIDLIST pidl,LPSTR pszPath);第一個(gè)參數(shù)就是存儲(chǔ)了路徑信息的ITEMIDLIST結(jié)構(gòu)指針,第二個(gè)參數(shù)是一個(gè)字符緩沖區(qū),用于接收字符串。它應(yīng)當(dāng)有_MAX_PATH所指定的長(zhǎng)度,_MAX_PATH在Windows系統(tǒng)中被定義為260個(gè)字符, 其大小可以是260或520個(gè)字節(jié),這取決于是否使用了 Uni code。附帶創(chuàng)建瀏覽文件對(duì)話框”創(chuàng)建可以多選的瀏覽文件對(duì)話

10、框”一、創(chuàng)建瀏覽文件對(duì)話框”用CFileDialog類實(shí)現(xiàn),比如:CFileDialog FDlg(TRUE , ".doc" , NULL , OFN_HIDEREADONLY , "word文件(*doc)|*doc|所有文件(*.*) |*|");if(FDIg.DoModal() = IDOK)filePath = FDIg.GetPathName();UpdateData(false);fiIePath.RepIace("","");CFileDialog文件選擇對(duì)話框的使用:首先構(gòu)造一個(gè)對(duì)象并提供相應(yīng)的

11、參數(shù),構(gòu)造函數(shù)原型如下:CFileDialog:CFileDialog(BOOL bOpenFileDialog, /為TRUE則顯示打開(kāi)對(duì)話框,為 FALSE則顯示保存對(duì)話文件對(duì)話LPCTSTR lpszDefExt = NULL, / 默認(rèn)的文件擴(kuò)展名LPCTSTR lpszFileName = NULL, / 默認(rèn)的文件名DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, /設(shè)定風(fēng)格LPCTSTR lpszFilter = NULL, /列岀可供選擇的文件類型和相應(yīng)的擴(kuò)展名CWnd* pPare ntWnd = NULL / 父

12、窗口句柄指針);LPCTSTR lpszFilter 參數(shù)格式如:"Chart Files (*xlc)|*xlc|Worksheet Files (*xls)|*xls|Data Files (*xlc;*xls)|*xlc;*xls|All Files (*)|*|"文件類型說(shuō)明和擴(kuò)展名間用|分隔,同種類型文件的擴(kuò)展名間可以用;分割,每種文件類型間用|分隔,末尾用|指明。創(chuàng)建文件對(duì)話框可以使用 DoModal(),在返回后可以利用下面的函數(shù)得到用戶選擇:CStri ng CFileDialog:GetPathName()得到完整的文件名,包括目錄名和擴(kuò)展名如:c:tes

13、ttest1.txtCStri ng CFileDialog:GetFileName()得到完整的文件名,包括擴(kuò)展名如:test1.txt二、創(chuàng)建可以多選的 瀏覽文件對(duì)話框”使用 CFileDialog 類并設(shè)置 OFN_ALLOWMULTISELECT 標(biāo)志,OPENFILENAME 結(jié)構(gòu)體的 lpstrFile成員是一個(gè)指向用戶申請(qǐng)分配的緩沖區(qū),里面接受所選的路徑和文件名列表,這個(gè)列表的每一 項(xiàng)由一個(gè)NULL隔開(kāi),最末以兩個(gè)NULL結(jié)束。nMaxFile成員指明了緩沖區(qū)的大小,如果所選擇的文 件名的加起來(lái)的總長(zhǎng)度超過(guò)了此值,則DoModal函數(shù)返回IDCANCEL,如果用戶試圖打開(kāi)超過(guò)緩沖

14、區(qū)大小的文件集的話,CommDlgExtendedError()將返回 FNERR_BUFFERTOOSMALL,這時(shí)候,lpstrFile的前兩個(gè)byte將會(huì)包含實(shí)際需要的緩沖區(qū)的字節(jié)數(shù)。如果是在 WindowsNT 4.0下,能被拷貝到lpstrFile緩沖區(qū)的字節(jié)數(shù)被限制在2562字節(jié)以內(nèi),女口果超過(guò)將被截?cái)?。以下是一個(gè)使用該類進(jìn)行多文件名選擇的例子:#i nclude "cderr.h" /fordefi niti onof FNERR BUFFERTOOSMALLCFileDialogdlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT,

15、NULL, NULL );DWORD MAXFILE4000 ;dlg.m_ofn. nM axFileMAXFILE;char* pc =newcharMAXFILE;dlg.m_ofn.lpstrFile =pc;dlg.m_ofn.lpstrFile0 = NULL;int iRetur n = dlg.DoModal();if(iRetur n=IDOK)intn Cou nt =0;POSITION pos =dlg.GetStartPositio n();CStri ng FileName;while (pos != NULL)FileName = dlg.GetNextPathName(pos);AfxMessageBox(FileName); / 顯示所選的多個(gè)文件的路徑 n Cou nt+;/記錄所選文件的數(shù)目CStri ng str;s

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論