



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Visual C+(VC) 中選擇文件夾”對話框的程序的編寫 2010-04-10 01:07 A.M.在實(shí)際的MFC編程當(dāng)中,常常需要彈出對話框選擇文件、選擇目錄等操作,對于選擇文件,用CFileDialog就可以很簡單的解決,而對于選擇目錄,則稍稍需要多一些步驟,需要自己創(chuàng)建 Dialog。 首先創(chuàng)建如下的對話框,并為它創(chuàng)建類Dialog,在Dialog頭文件中添加保存目錄名的變量 CStringm_strPath,然后為編輯框右邊的按鈕添加消息響應(yīng)函數(shù) OnButtonBrowser(),并添加如下代碼。國像路徑:Editj |確定 | 眼消void CDialog:OnButtonBr
2、owser()/ TODO: Add your control notification handler code hereUpdateData(TRUE);char szDirMAX_PATH;BROWSEINFO bi;ITEMIDLIST *pidl;bi.hwndOwner = this->m_hWnd; / 指定父窗口,在對話框顯示期間,父窗口將被禁用bi.pidlRoot = NULL; / 如果指定NULL,就以 篥面”為根bi.pszDisplayName = szDir;bi.lpszTitle ="請選擇目錄”;/這一行將顯示在對話框的頂端bi.ulFlag
3、s = BIF_STATUSTEXT | BIF_USENEWUI | BIF_RETURNONLYFSDIRS;bi.lpfn = NULL;bi.lParam = 0;bi.iImage = 0;pidl = SHBrowseForFolder(&bi);if(pidl = NULL) return;if(!SHGetPathFromIDList(pidl, szDir) return;else m_strPath = szDir;UpdateData(FALSE);當(dāng)程序啟動起來的時(shí)候,點(diǎn)擊按鈕,就會彈出如下的選擇目錄的對話框Visual C+(VC)中,BROWSEINFO 結(jié)
4、構(gòu)中包含有用戶選中目錄的重要信息。BROWSEINFO 結(jié)構(gòu)蜓義typedef struct_browseinfo(HWND hwndOwner;LPCITEMIDLIST pidlRoot;LPSTR pszDisplayName;LPCSTR lpszTitle;UINT ulFlags;BFFCALLBACK lpfn;LPARAM lParam;int iImage;BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;成員變量hwndOwner :瀏覽文件夾對話框的父窗體句柄。pidlRoot : ITEMIDLIST結(jié)構(gòu)的地址,包含瀏覽時(shí)的初始根目錄,而且只有
5、被指定的目錄和其子目 錄才顯示在瀏覽文件夾對話框中。該成員變量可以是NULL,在此時(shí)桌面目錄將被使用。pszDisplayName :用來保存用戶選中的目錄字符串的內(nèi)存地址(緩沖區(qū))。該緩沖區(qū)的大小缺省是 定義的MAX_PATH常量宏。lpszTitle :該瀏覽文件夾對話框?qū)υ捒虻娘@示文本,用來提示該瀏覽文件夾對話框的功能、作用和 目的。ulFlags :該標(biāo)志位描述了對話框的選項(xiàng)。它可以為0,也可以是以下常量的任意組合:BIF_BROWSEFORCOMPUTER :返回計(jì)算機(jī)名。除非用戶選中瀏覽器中的一個(gè)計(jì)算機(jī)名,否則 該對話框中的OK ”按鈕為灰色。BIF_BROWSEFORPRINTE
6、R :返回打印機(jī)名。除非選中一個(gè)打印機(jī)名,否則OK”按鈕為灰色。BIF_BROWSEINCLUDEFILES :瀏覽器將顯示目錄,同時(shí)也顯示文件。BIF_DONTGOBELOWDOMAIN :在樹形視窗中,不包含域名底下的網(wǎng)絡(luò)目錄結(jié)構(gòu)。BIF_EDITBOX :瀏覽對話框中包含一個(gè)編輯框,在該編輯框中用戶可以輸入選中項(xiàng)的名字。BIF_RETURNFSANCESTORS :返回文件系統(tǒng)的一個(gè)節(jié)點(diǎn)。僅僅當(dāng)選中的是有意義的節(jié)點(diǎn)時(shí),OK ”按鈕才可以使用。BIF_RETURNONLYFSDIRS :僅僅返回文件系統(tǒng)的目錄。例如:在瀏覽文件夾對話框中,當(dāng)選中任意一個(gè)目錄時(shí),該 OK”按鈕可用,而當(dāng)選中
7、我的電腦”或網(wǎng)上鄰居”等非有意義的節(jié)點(diǎn)時(shí),OK”按鈕為灰色。BIF_STATUSTEXT :在對話框中包含一個(gè)狀態(tài)區(qū)域。通過給對話框發(fā)送消息使回調(diào)函數(shù)設(shè)置狀態(tài) 文本。BIF_VALIDATE :當(dāng)沒有BIF_EDITBOX標(biāo)志位時(shí),該標(biāo)志位被忽略。如果用戶在編輯框中輸入的 名字非法,瀏覽對話框?qū)l(fā)送 BFFM_VALIDATEFAILED消息給回調(diào)函數(shù)。lpfn:應(yīng)用程序定義的瀏覽對話框回調(diào)函數(shù)的地址。當(dāng)對話框中的事件發(fā)生時(shí),該對話框?qū)⒄{(diào)用回調(diào)函數(shù)。該參數(shù)可用為 NULL。lParam :對話框傳遞給回調(diào)函數(shù)的一個(gè)參數(shù)指針。iImage:與選中目錄相關(guān)的圖像。該圖像將被指定為系統(tǒng)圖像列表中的索
8、引值。Windows Shell的一個(gè)功能在于管理并提供方法存取系統(tǒng)中的眾多對像,些對像包括了文件,網(wǎng) 路上的計(jì)算機(jī),控制面板程序,回收站等等,為了識別每一個(gè)對像,Windows Shell使用了 Item ID來表示它仍,而Iten ID Lists用來表示一個(gè)對像的路徑。所以,ITEMID和ITEMIDLIST的關(guān)系類似于文 件名和路徑的關(guān)系。如果只對文件系統(tǒng)而言的話,ITEMIDLIST可以看成是路徑的另一中表示法,Windows Shell也提供了函數(shù)來進(jìn)行轉(zhuǎn)化。如果SHBrowseForFolder 函數(shù)返回的 ITEMIDLIST 結(jié)構(gòu)指針不為 NULL ,就可以使用 SHGetP
9、athFromIDList 函數(shù)取得存儲于ITEMIDLIST結(jié)構(gòu)指針中的路徑信息。SHGetPathFromIDList 函數(shù)的原型如下:WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(LPCITEMIDLIST pidl, LPSTR pszPath );第一個(gè)參數(shù)就是存儲了路徑信息的ITEMIDLIST結(jié)構(gòu)指針,第二個(gè)參數(shù)是一個(gè)字符緩沖區(qū),用于接收字符串。它應(yīng)當(dāng)有_MAX_PATH所指定的長度,_MAX_PATH在Windows系統(tǒng)中被定義為260個(gè)字符, 其大小可以是260或520個(gè)字節(jié),這取決于是否使用了Unicode。附帶創(chuàng)建瀏覽文件對話框”
10、創(chuàng)建可以多選的瀏覽文件對話框”一、創(chuàng)建瀏覽文件對話框”用CFileDialog類實(shí)現(xiàn),比如:CFileDialog FDlg(TRUE , ".doc" , NULL , OFN_HIDEREADONLY , "word 文件(*.doc)|*.doc| 所有文件(*.*) |*.*|");if(FDlg.DoModal() = IDOK)(filePath = FDlg.GetPathName();UpdateData(false);filePath.Replace("","");CFileDialog文件選擇對
11、話框的使用:首先構(gòu)造一個(gè)對象并提供相應(yīng)的參數(shù),構(gòu)造函數(shù)原型如下:CFileDialog:CFileDialog(BOOL bOpenFileDialog, /為TRUE則顯示打開對話框,為 FALSE則顯示保存對話文件對話 框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*
12、 pParentWnd = NULL / 父窗口句柄指針);LPCTSTR lpszFilter 參數(shù)格式如:"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc;*.xls|All Files (*.*)|*.*|"文件類型說明和擴(kuò)展名間用|分隔,同種類型文件的擴(kuò)展名間可以用;分割,每種文件類型間用|分隔,末尾用|指明。創(chuàng)建文件對話框可以使用DoModal(),在返回后可以利用下面的函數(shù)得到用戶選擇:CString CFileDialog:GetPat
13、hName()得到完整的文件名,包括目錄名和擴(kuò)展名如:c:testtest1.txtCString CFileDialog:GetFileName()得到完整的文件名,包括擴(kuò)展名如: test1.txt二、創(chuàng)建可以多選的 瀏覽文件對話框”使用 CFileDialog 類并設(shè)置 OFN_ALLOWMULTISELECT 標(biāo)志,OPENFILENAME 結(jié)構(gòu)體的 lpstrFile成員是一個(gè)指向用戶申請分配的緩沖區(qū),里面接受所選的路徑和文件名列表,這個(gè)列表的每一 項(xiàng)由一個(gè)NULL隔開,最末以兩個(gè)NULL結(jié)束。nMaxFile成員指明了緩沖區(qū)的大小,如果所選擇的文 件名的加起來的總長度超過了此值,則
14、DoModal函數(shù)返回IDCANCEL ,如果用戶試圖打開超過緩沖區(qū)大小的文件集的話,CommDlgExtendedError()將返回 FNERR_BUFFERTOOSMALL ,這時(shí)候,lpstrFile 的前兩個(gè)byte將會包含實(shí)際需要的緩沖區(qū)的字節(jié)數(shù)。如果是在 Windows NT4.0下,能被拷貝到lpstrFile緩沖區(qū)的字節(jié)數(shù)被限制在 2562字節(jié)以內(nèi),如果超過將被截?cái)?。以下是一個(gè)使用該類進(jìn)行多文件名選擇的例子:#include "cderr.h" /for definition of FNERR_BUFFERTOOSMALLCFileDialogdlg(TR
15、UE,NULL,NULL,OFN_ALLOWMULTISELECT, NULL, NULL );DWORD MAXFILE =4000 ;dlg.m_ofn.nMaxFile = MAXFILE;char* pc =newcharMAXFILE;dlg.m_ofn.lpstrFile =pc;dlg.m_ofn.lpstrFile0 = NULL;int iReturn = dlg.DoModal();if(iReturn=IDOK)intnCount =0;POSITION pos = dlg.GetStartPosition();CString FileName;while (pos != NULL) FileName = dlg.GetNextPathName(pos);AfxMessageBox(FileName); / 顯示所選的多個(gè)文件的路徑nCount+;/記錄所選文件的數(shù)目CString str;st
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水利水電工程考試期間的查漏補(bǔ)缺試題及答案
- 水利水電工程行業(yè)動態(tài)追蹤試題及答案
- 2025年市政工程試題及答案概覽
- 關(guān)于中央經(jīng)濟(jì)政策的中級經(jīng)濟(jì)師試題及答案
- 真理主題班會課件
- 工程項(xiàng)目成本控制試題及答案
- 加強(qiáng)日常消毒和環(huán)境衛(wèi)生工作計(jì)劃
- 愛情測試題及答案
- 美術(shù)教育觀念的革新與反思計(jì)劃
- 行政管理經(jīng)濟(jì)法試題及答案的深入探討
- 碩士外語水平考試指南與答案
- 2025年福建省三明市中考二模生物試題(原卷版+解析版)
- 完形填空15篇(答案解析)-2025年中考英語分類專練(深圳專用)
- 2025年事業(yè)單位e類考試真題及答案
- 2025-2030中國印度醋栗提取行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報(bào)告
- 《急性冠狀動脈綜合征》課件
- 武漢市2025屆高中畢業(yè)生四月調(diào)研考試 試卷與解析
- 第18課《井岡翠竹》 課件
- 2024年陜西氫能產(chǎn)業(yè)發(fā)展有限公司所屬單位招聘筆試真題
- 奶茶飲品采購合同協(xié)議
- (四調(diào))武漢市2025屆高中畢業(yè)生四月調(diào)研考試 英語試卷
評論
0/150
提交評論