



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、VisualC+(VC)中選擇文件夾”對(duì)話(huà)框的程序的編寫(xiě)2010-04-1001:07A.M.在實(shí)際的 MFC 編程當(dāng)中, 常常需要彈出對(duì)話(huà)框選擇文件、 選擇目錄等操作, 對(duì)于選擇文件, 用 CFileDialog就可以很簡(jiǎn)單的解決,而對(duì)于選擇目錄,則稍稍需要多一些步驟,需要自己創(chuàng)建 Dialog。首先創(chuàng)建如下的對(duì)話(huà)框,并為它創(chuàng)建類(lèi) Dialog,在 Dialog 頭文件中添加保存目錄名的變量 CStringm_strPath,然后為編輯框右邊的按鈕添加消息響應(yīng)函數(shù) OnButtonBrowser(),并添加如下代碼。圖像略徑:圖像略徑:Editj| |確定確定| |消消 jvoidCDial
2、og:OnButtonBrowser()/TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);charszDirMAX_PATH;BROWSEINFObi;ITEMIDLIST*pidl;bi.hwndOwner=this-m_hWnd;/指定父窗口,在對(duì)話(huà)框顯示期間,父窗口將被禁用bi.pidlRoot=NULL;/如果指定 NULL,就以巢面”為根bi.pszDisplayName=szDir;bi.lpszTitle=請(qǐng)選擇目錄;/這一行將顯示在對(duì)話(huà)框的頂端bi.ulFlags=BIF_STATUSTEXT|BIF
3、_USENEWUI|BIF_RETURNONLYFSDIRS;bi.lpfn=NULL;bi.lParam=0;bi.iImage=0;pidl=SHBrowseForFolder(&bi);if(pidl=NULL)return;if(!SHGetPathFromIDList(pidl,szDir)return;elsem_strPath=szDir;UpdateData(FALSE);當(dāng)程序啟動(dòng)起來(lái)的時(shí)候,點(diǎn)擊按鈕,就會(huì)彈出如下的選擇目錄的對(duì)話(huà)框VisualC+(VC)中,BROWSEINFO 結(jié)構(gòu)中包含有用戶(hù)選中目錄的重要信息。BROWSEINFO 結(jié)構(gòu)*義typedefstru
4、ct_browseinfo(HWNDhwndOwner;LPCITEMIDLISTpidlRoot;LPSTRpszDisplayName;LPCSTRlpszTitle;UINTulFlags;BFFCALLBACKlpfn;LPARAMlParam;intiImage;BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;成員變量hwndOwner:瀏覽文件夾對(duì)話(huà)框的父窗體句柄。pidlRoot:ITEMIDLIST 結(jié)構(gòu)的地址,包含瀏覽時(shí)的初始根目錄,而且只有被指定的目錄和其子目錄才顯示在瀏覽文件夾對(duì)話(huà)框中。該成員變量可以是 NULL,在此時(shí)桌面目錄將被使用。psz
5、DisplayName:用來(lái)保存用戶(hù)選中的目錄字符串的內(nèi)存地址(緩沖區(qū))。該緩沖區(qū)的大小缺省是定義的MAX_PATH 常量宏。lpszTitle:該瀏覽文件夾對(duì)話(huà)框?qū)υ?huà)框的顯示文本,用來(lái)提示該瀏覽文件夾對(duì)話(huà)框的功能、作用和目的。ulFlags:該標(biāo)志位描述了對(duì)話(huà)框的選項(xiàng)。它可以為 0,也可以是以下常量的任意組合:BIF_BROWSEFORCOMPUTER:返回計(jì)算機(jī)名。除非用戶(hù)選中瀏覽器中的一個(gè)計(jì)算機(jī)名,否則該對(duì)話(huà)框中的 OK”按鈕為灰色。BIF_BROWSEFORPRINTER:返回打印機(jī)名。除非選中一個(gè)打印機(jī)名,否則 OK”按鈕為灰色。BIF_BROWSEINCLUDEFILES:瀏覽器將
6、顯示目錄,同時(shí)也顯示文件。BIF_DONTGOBELOWDOMAIN:在樹(shù)形視窗中,不包含域名底下的網(wǎng)絡(luò)目錄結(jié)構(gòu)。BIF_EDITBOX:瀏覽對(duì)話(huà)框中包含一個(gè)編輯框,在該編輯框中用戶(hù)可以輸入選中項(xiàng)的名字。BIF_RETURNFSANCESTORS:返回文件系統(tǒng)的一個(gè)節(jié)點(diǎn)。僅僅當(dāng)選中的是有意義的節(jié)點(diǎn)時(shí),OK”按鈕才可以使用。BIF_RETURNONLYFSDIRS:僅僅返回文件系統(tǒng)的目錄。例如:在瀏覽文件夾對(duì)話(huà)框中,當(dāng)選中任意一個(gè)目錄時(shí),該 OK”按鈕可用,而當(dāng)選中我的電腦”或網(wǎng)上鄰居”等非有意義的節(jié)點(diǎn)時(shí),OK”按鈕為灰色。BIF_STATUSTEXT:在對(duì)話(huà)框中包含一個(gè)狀態(tài)區(qū)域。通過(guò)給對(duì)話(huà)框發(fā)
7、送消息使回調(diào)函數(shù)設(shè)置狀態(tài)文本。BIF_VALIDATE:當(dāng)沒(méi)有 BIF_EDITBOX 標(biāo)志位時(shí), 該標(biāo)志位被忽略。 如果用戶(hù)在編輯框中輸入的名字非法,瀏覽對(duì)話(huà)框?qū)l(fā)送 BFFM_VALIDATEFAILED 消息給回調(diào)函數(shù)。lpfn:應(yīng)用程序定義的瀏覽對(duì)話(huà)框回調(diào)函數(shù)的地址。當(dāng)對(duì)話(huà)框中的事件發(fā)生時(shí),該對(duì)話(huà)框?qū)⒄{(diào)用回調(diào)函數(shù)。該參數(shù)可用為 NULLolParam:對(duì)話(huà)框傳遞給回調(diào)函數(shù)的一個(gè)參數(shù)指針。iImage:與選中目錄相關(guān)的圖像。該圖像將被指定為系統(tǒng)圖像列表中的索引值。WindowsShell 的一個(gè)功能在于管理并提供方法存取系統(tǒng)中的眾多對(duì)像,適些對(duì)像包括了文件,網(wǎng)路上的計(jì)算機(jī),控制面板程序,
8、回收立等等,為了識(shí)別每一個(gè)對(duì)像,WindowsShell 使用了 ItemID 來(lái)表示它優(yōu) 1 而 ItenIDLists 用來(lái)表示一個(gè)對(duì)像的路徑。所以,ITEMID 和 ITEMIDLIST 的關(guān)系類(lèi)似于文件名和路徑的關(guān)系。如果只對(duì)文件系統(tǒng)而言的話(huà),ITEMIDLIST 可以看成是路徑的另一中表示法,WindowsShell 也提供了函數(shù)來(lái)進(jìn)行轉(zhuǎn)化。如 果 SHBrowseForFolder 函 數(shù) 返 回 的 ITEMIDLIST 結(jié) 構(gòu) 指 針 不 為 NULL, 就 可 以 使 用SHGetPathFromIDList 函數(shù)取得存儲(chǔ)于 ITEMIDLIST 結(jié)構(gòu)指針中的路徑信息。SHG
9、etPathFromIDList 函數(shù)的原型如下:WINSHELLAPIBOOLWINAPISHGetPathFromIDList(LPCITEMIDLISTpidl,LPSTRpszPath);第一個(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é),這取決于是否使用了 Unicode。附帶創(chuàng)建瀏覽文件對(duì)話(huà)框”創(chuàng)建可以多選的瀏覽文件對(duì)話(huà)框”一、創(chuàng)建瀏覽文件對(duì)話(huà)框”用 CFileDialog
10、 類(lèi)實(shí)現(xiàn),比如:CFileDialogFDlg(TRUE,.doc,NULL,OFN_HIDEREADONLY,word 文件(*doc)|*doc|所有文件(*)|*|);if(FDlg.DoModal()=IDOK)(filePath=FDlg.GetPathName();UpdateData(false);filePath.Replace(,);CFileDialog 文件選擇對(duì)話(huà)框的使用:首先構(gòu)造一個(gè)對(duì)象并提供相應(yīng)的參數(shù),構(gòu)造函數(shù)原型如下:CFileDialog:CFileDialog(BOOLbOpenFileDialog,/為 TRUE 則顯示打開(kāi)對(duì)話(huà)框,為 FALSE 則顯示保存
11、對(duì)話(huà)文件對(duì)話(huà)框LPCTSTRlpszDefExt=NULL,/默認(rèn)的文件擴(kuò)展名LPCTSTRlpszFileName=NULL,/默認(rèn)的文件名DWORDdwFlags=OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,/設(shè)定風(fēng)格LPCTSTRlpszFilter=NULL,/列出可供選擇的文件類(lèi)型和相應(yīng)的擴(kuò)展名 CWnd*pParentWnd=NULL/父窗口句柄指針);LPCTSTRlpszFilter 參數(shù)格式如:ChartFiles(*xlc)|*xlc|WorksheetFiles(*xls)|*xls|DataFiles(*xlc;*xls)|*xlc;*xl
12、s|AllFiles(*)|*|;文件類(lèi)型說(shuō)明和擴(kuò)展名間用|分隔,同種類(lèi)型文件的擴(kuò)展名間可以用;分割,每種文件類(lèi)型間用|分隔,末尾用|指明。創(chuàng)建文件對(duì)話(huà)力 I 可以使用 DoModal(),在返回后可以利用下面的函數(shù)得到用戶(hù)選擇:CStringCFileDialog:GetPathName()得到完整的文件名,包括目錄名和擴(kuò)展名如:c:testtest1.txtCStringCFileDialog:GetFileName()得到完整的文件名,包括擴(kuò)展名如:test1.txt二、創(chuàng)建可以多選的瀏覽文件對(duì)話(huà)框”使用 CFileDialog 類(lèi)并設(shè)置 OFN_ALLOWMULTISELECT 標(biāo)志,
13、OPENFILENAME 結(jié)構(gòu)體的 lpstrFile 成員是一個(gè)指向用戶(hù)申請(qǐng)分配的緩沖區(qū),里面接受所選的路徑和文件名列表,這個(gè)列表的每一項(xiàng)由一個(gè) NULL 隔開(kāi),最末以?xún)蓚€(gè) NULL 結(jié)束。nMaxFile 成員指明了緩沖區(qū)的大小,如果所選擇的文件名的加起來(lái)的總長(zhǎng)度超過(guò)了此值,則 DoModal 函數(shù)返回 IDCANCEL,如果用戶(hù)試圖打開(kāi)超過(guò)緩沖區(qū)大小的文件集的話(huà),CommDlgExtendedError()將返回 FNERR_BUFFERTOOSMALL,這時(shí)候,lpstrFile 的前兩個(gè) byte 將會(huì)包含實(shí)際需要的緩沖區(qū)的字節(jié)數(shù)。如果是在 WindowsNT4.0 下, 能被拷貝到
14、 lpstrFile 緩沖區(qū)的字節(jié)數(shù)被限制在 2562 字節(jié)以?xún)?nèi), 如果超過(guò)將被截?cái)?。以下是一個(gè)使用該類(lèi)進(jìn)行多文件名選擇的例子:#includecderr.h/fordefinitionofFNERR_BUFFERTOOSMALLCFileDialogdlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT,NULL,NULL);DWORDMAXFILE=4000;dlg.m_ofn.nMaxFile=MAXFILE;char*pc=newcharMAXFILE;dlg.m_ofn.lpstrFile=pc;dlg.m_ofn,lpstrFile0=NULL;intiReturn=dlg.DoModal();if(iReturn=IDOK)intnCount=0;POSITIONpos=dlg.GetStartPosition();CStringFileName;while(pos!=NULL)FileName=dlg.GetNextPathName(pos);AfxMessageBox(FileName);/ 顯 示 所選的多個(gè)文件
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 城市藝術(shù)經(jīng)濟(jì)影響-洞察及研究
- 機(jī)械制造項(xiàng)目履約保證措施
- 書(shū)法作品交流展示活動(dòng)計(jì)劃
- 教育行業(yè)線(xiàn)上培訓(xùn)心得體會(huì)分享
- 管道工程資料標(biāo)準(zhǔn)管理措施
- 信息技術(shù)支持下的英語(yǔ)教學(xué)創(chuàng)新心得體會(huì)
- 電影《峰爆》危機(jī)管理經(jīng)驗(yàn)觀(guān)后感心得體會(huì)
- 媒體從業(yè)人員個(gè)人整改問(wèn)題清單及整改措施
- 六年級(jí)英語(yǔ)教學(xué)雙師課堂計(jì)劃
- 湖北安陸一中2025屆物理高一第二學(xué)期期末經(jīng)典試題含解析
- 2025安徽安慶市桐城經(jīng)開(kāi)區(qū)建設(shè)投資集團(tuán)有限公司招聘12人筆試參考題庫(kù)附帶答案詳解
- 給水管道試壓、沖洗消毒方案
- 老年群體智能手機(jī)使用教程
- 高速公路集中養(yǎng)護(hù)工作指南-地方標(biāo)準(zhǔn)編制說(shuō)明
- 建設(shè)工程項(xiàng)目的組織協(xié)調(diào)保障措施
- 刻紙入門(mén)基礎(chǔ)知識(shí)
- 江蘇連云港某公司“12.9”爆炸事故報(bào)告
- 第13課 立足專(zhuān)業(yè) 謀劃發(fā)展(課件)-【中職專(zhuān)用】高一思想政治《心理健康與職業(yè)生涯》
- 介入術(shù)后水化治療
- 2025-2030年中國(guó)甲殼素殼聚糖行業(yè)運(yùn)行動(dòng)態(tài)與發(fā)展戰(zhàn)略分析報(bào)告
- 人教版三年級(jí)上下數(shù)學(xué)試卷合集-綜合素質(zhì)訓(xùn)練
評(píng)論
0/150
提交評(píng)論