下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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-10 01:07 A.M.在實(shí)際的MFC編程當(dāng)中,常常需要彈出對(duì)話框選擇文件、選擇目錄等操作,對(duì)于選擇文件,用CFileDialog就可以很簡(jiǎn)單的解決,而對(duì)于選擇目錄,則稍稍需要多一些步驟,需要自己創(chuàng)建 Dialog。 首先創(chuàng)建如下的對(duì)話框,并為它創(chuàng)建類(lèi)Dialog,在Dialog頭文件中添加保存目錄名的變量 CStringm_strPath,然后為編輯框右邊的按鈕添加消息響應(yīng)函數(shù) OnButtonBrowser(),并添加如下代碼。國(guó)像路徑: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; / 指定父窗口,在對(duì)話框顯示期間,父窗口將被禁用bi.pidlRoot = NULL; / 如果指定NULL,就以 篥面”為根bi.pszDisplayName = szDir;bi.lpszTitle ="請(qǐng)選擇目錄”;/這一行將顯示在對(duì)話框的頂端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)程序啟動(dòng)起來(lái)的時(shí)候,點(diǎn)擊按鈕,就會(huì)彈出如下的選擇目錄的對(duì)話框Visual C+(VC)中,BROWSEINFO 結(jié)
4、構(gòu)中包含有用戶(hù)選中目錄的重要信息。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 :瀏覽文件夾對(duì)話框的父窗體句柄。pidlRoot : ITEMIDLIST結(jié)構(gòu)的地址,包含瀏覽時(shí)的初始根目錄,而且只有
5、被指定的目錄和其子目 錄才顯示在瀏覽文件夾對(duì)話框中。該成員變量可以是NULL,在此時(shí)桌面目錄將被使用。pszDisplayName :用來(lái)保存用戶(hù)選中的目錄字符串的內(nèi)存地址(緩沖區(qū))。該緩沖區(qū)的大小缺省是 定義的MAX_PATH常量宏。lpszTitle :該瀏覽文件夾對(duì)話框?qū)υ捒虻娘@示文本,用來(lái)提示該瀏覽文件夾對(duì)話框的功能、作用和 目的。ulFlags :該標(biāo)志位描述了對(duì)話框的選項(xiàng)。它可以為0,也可以是以下常量的任意組合:BIF_BROWSEFORCOMPUTER :返回計(jì)算機(jī)名。除非用戶(hù)選中瀏覽器中的一個(gè)計(jì)算機(jī)名,否則 該對(duì)話框中的OK ”按鈕為灰色。BIF_BROWSEFORPRINTE
6、R :返回打印機(jī)名。除非選中一個(gè)打印機(jī)名,否則OK”按鈕為灰色。BIF_BROWSEINCLUDEFILES :瀏覽器將顯示目錄,同時(shí)也顯示文件。BIF_DONTGOBELOWDOMAIN :在樹(shù)形視窗中,不包含域名底下的網(wǎng)絡(luò)目錄結(jié)構(gòu)。BIF_EDITBOX :瀏覽對(duì)話框中包含一個(gè)編輯框,在該編輯框中用戶(hù)可以輸入選中項(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)選中
7、我的電腦”或網(wǎng)上鄰居”等非有意義的節(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)志位被忽略。如果用戶(hù)在編輯框中輸入的 名字非法,瀏覽對(duì)話框?qū)l(fā)送 BFFM_VALIDATEFAILED消息給回調(diào)函數(shù)。lpfn:應(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ù)指針。iImage:與選中目錄相關(guān)的圖像。該圖像將被指定為系統(tǒng)圖像列表中的索
8、引值。Windows Shell的一個(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)系類(lèi)似于文 件名和路徑的關(guān)系。如果只對(duì)文件系統(tǒng)而言的話,ITEMIDLIST可以看成是路徑的另一中表示法,Windows Shell也提供了函數(shù)來(lái)進(jìn)行轉(zhuǎn)化。如果SHBrowseForFolder 函數(shù)返回的 ITEMIDLIST 結(jié)構(gòu)指針不為 NULL ,就可以使用 SHGetP
9、athFromIDList 函數(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é),這取決于是否使用了Unicode。附帶創(chuàng)建瀏覽文件對(duì)話框”
10、創(chuàng)建可以多選的瀏覽文件對(duì)話框”一、創(chuàng)建瀏覽文件對(duì)話框”用CFileDialog類(lèi)實(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文件選擇對(duì)
11、話框的使用:首先構(gòu)造一個(gè)對(duì)象并提供相應(yīng)的參數(shù),構(gòu)造函數(shù)原型如下:CFileDialog:CFileDialog(BOOL bOpenFileDialog, /為T(mén)RUE則顯示打開(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, /列出可供選擇的文件類(lèi)型和相應(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 (*.*)|*.*|"文件類(lèi)型說(shuō)明和擴(kuò)展名間用|分隔,同種類(lèi)型文件的擴(kuò)展名間可以用;分割,每種文件類(lèi)型間用|分隔,末尾用|指明。創(chuàng)建文件對(duì)話框可以使用DoModal(),在返回后可以利用下面的函數(shù)得到用戶(hù)選擇:CString CFileDialog:GetPat
13、hName()得到完整的文件名,包括目錄名和擴(kuò)展名如:c:testtest1.txtCString CFileDialog:GetFileName()得到完整的文件名,包括擴(kuò)展名如: test1.txt二、創(chuàng)建可以多選的 瀏覽文件對(duì)話框”使用 CFileDialog 類(lèi)并設(shè)置 OFN_ALLOWMULTISELECT 標(biāo)志,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ò)了此值,則
14、DoModal函數(shù)返回IDCANCEL ,如果用戶(hù)試圖打開(kāi)超過(guò)緩沖區(qū)大小的文件集的話,CommDlgExtendedError()將返回 FNERR_BUFFERTOOSMALL ,這時(shí)候,lpstrFile 的前兩個(gè)byte將會(huì)包含實(shí)際需要的緩沖區(qū)的字節(jié)數(shù)。如果是在 Windows NT4.0下,能被拷貝到lpstrFile緩沖區(qū)的字節(jié)數(shù)被限制在 2562字節(jié)以?xún)?nèi),如果超過(guò)將被截?cái)?。以下是一個(gè)使用該類(lèi)進(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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 贛南醫(yī)學(xué)院《園藝學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 甘肅中醫(yī)藥大學(xué)《種子檢驗(yàn)技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 《港口起重機(jī)械說(shuō)》課件
- 小學(xué)生課件模板圖片
- 安全取暖主題班會(huì)課件
- 七年級(jí)道德與法治上冊(cè)第四單元生命的思考第八課探問(wèn)生命第1框生命可以永恒嗎說(shuō)課稿新人教版
- 小學(xué)生觀看黨的課件
- 三年級(jí)科學(xué)上冊(cè)第三單元天氣與我們的生活第十五課一周的天氣教案青島版
- 礦區(qū)消防安全課件
- 校園課件安全事故
- 市場(chǎng)營(yíng)銷(xiāo)習(xí)題庫(kù)(附參考答案)
- 2024年馬拉松比賽項(xiàng)目合作計(jì)劃書(shū)
- 2024年演出經(jīng)紀(jì)人資格《思想政治與法律基礎(chǔ)》考前必刷必練題庫(kù)500題(含真題、必會(huì)題)
- 苗圃購(gòu)銷(xiāo)合同范本
- 《二十四節(jié)氣融入幼兒園教育活動(dòng)的個(gè)案研究》
- 麻醉與舒適醫(yī)療
- 全國(guó)林草行業(yè)森林消防員技能競(jìng)賽理論知識(shí)考試題及答案
- GB/T 44899-2024商品條碼散裝和大宗商品編碼與條碼表示
- 高考英語(yǔ)一輪復(fù)習(xí)知識(shí)清單(全國(guó)版)專(zhuān)題06 語(yǔ)法填空倒裝句100題(精練) 含答案及解析
- 侵入性器械(操作)相關(guān)感染防控制度的落實(shí)
- 土方開(kāi)挖及周邊環(huán)境保護(hù)方案
評(píng)論
0/150
提交評(píng)論