1. 程式人生 > >VC開啟瀏覽檔案對話方塊、瀏覽資料夾對話方塊

VC開啟瀏覽檔案對話方塊、瀏覽資料夾對話方塊

今天,又看了這些東西,在VC裡面建立瀏覽檔案對話方塊比建立瀏覽資料夾對話方塊要簡單一些。

一、建立“瀏覽檔案對話方塊”         用CFileDialog類實現,比如:
     CFileDialog  FDlg(TRUE , ".doc" , NULL , OFN_HIDEREADONLY , "word檔案(*.doc)|*.doc|所有檔案(*.*) |*.*||" );         if(FDlg.DoModal() == IDOK)
        {             filePath = FDlg.GetPathName();
            UpdateData(false);
            filePath.Replace("//","////");
        }
CFileDialog檔案選擇對話方塊的使用:

    首先構造一個物件並提供相應的引數,建構函式原型如下:
CFileDialog::CFileDialog(
        BOOL bOpenFileDialog, 
//為TRUE則顯示開啟對話方塊,為FALSE則顯示儲存對話檔案對話方塊
        LPCTSTR lpszDefExt = NULL, 
//預設的副檔名
        LPCTSTR lpszFileName = NULL, 
//預設的檔名
        DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

 //設定風格
        LPCTSTR lpszFilter = NULL, 
//列出可供選擇的檔案型別和相應的副檔名
        CWnd* pParentWnd = NULL 
//父視窗控制代碼指標
    );

 
LPCTSTR lpszFilter 引數格式如:"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc;*.xls|All Files (*.*)|*.*||";檔案型別說明和副檔名間用 | 分隔,同種型別檔案的副檔名間可以用 ; 分割,每種檔案型別間用 | 分隔,末尾用 || 指明。

建立檔案對話方塊可以使用DoModal(),在返回後可以利用下面的函式得到使用者選擇: 
CString CFileDialog::GetPathName( ) 得到完整的檔名,包括目錄名和副檔名如:c:/test/test1.txt 
CString CFileDialog::GetFileName( ) 得到完整的檔名,包括副檔名如:test1.txt 

        二、建立“瀏覽資料夾的對話方塊”         這個沒辦法用CFileDialog類來實現了,可以用回撥函式,如下:
CString sFolderPath;

        BROWSEINFO bi;
        char Buffer[MAX_PATH];
        //初始化入口引數bi開始
        bi.hwndOwner = NULL;
        bi.pidlRoot =NULL;//初始化制定的root目錄很不容易,
        bi.pszDisplayName = Buffer;//此引數如為NULL則不能顯示對話方塊
        bi.lpszTitle = "修改接收路徑";
        //bi.ulFlags = BIF_BROWSEINCLUDEFILES;//包括檔案
        bi.ulFlags = BIF_EDITBOX;//包括檔案

        bi.lpfn = NULL;
        bi.iImage=IDR_MAINFRAME;
        //初始化入口引數bi結束
        LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//呼叫顯示選擇對話方塊
        if(pIDList)
        {
               SHGetPathFromIDList(pIDList, Buffer);
               //取得資料夾路徑到Buffer裡
               sFolderPath = Buffer;//將資料夾路徑儲存在一個CString物件裡
        }

        LPMALLOC lpMalloc;

        if(FAILED(SHGetMalloc(&lpMalloc)))

                return;

        lpMalloc->Free(pIDList);

        lpMalloc->Release();
        MessageBox(sFolderPath,"Title",MB_OK);

三、建立可以多選的“瀏覽檔案對話方塊”
    

使用CFileDialog類並設定OFN_ALLOWMULTISELECT標誌,OPENFILENAME結構體的lpstrFile成員是一個指向使用者申請分配的緩衝區,裡面接受所選的路徑和檔名列表,這個列表的每一項由一個NULL隔開,最末以兩個NULL結束。nMaxFile成員指明瞭緩衝區的大小,如果所選擇的檔名的加起來的總長度超過了此值,則DoModal函式返回IDCANCEL,如果使用者試圖開啟超過緩衝區大小的檔案集的話,CommDlgExtendedError()將返回FNERR_BUFFERTOOSMALL,這時候,lpstrFile的前兩個byte將會包含實際需要的緩衝區的位元組數。   

    
  如果是在Windows   NT   4.0下,能被拷貝到lpstrFile緩衝區的位元組數被限制在2562位元組以內,如果超過將被截斷。   
    
  以下是一個使用該類進行多檔名選擇的例子:   
    
  #include   "cderr.h"   //for   definition   of   FNERR_BUFFERTOOSMALL   
    
              CFileDialog       dlg(   TRUE,   NULL,   NULL,  
 OFN_ALLOWMULTISELECT,   NULL,   NULL   );   
              DWORD   MAXFILE   =   4000 ;  
              dlg.m_ofn.nMaxFile   =   MAXFILE;   
              char*   pc   =   new   char[MAXFILE];   
              dlg.m_ofn.lpstrFile   =   pc;   
              dlg.m_ofn.lpstrFile[0]   =   NULL;   
    
              int   iReturn   =   dlg.DoModal();   
              if(iReturn   ==     IDOK)   
              {   
                    int   nCount   =   0;   
                    POSITION   pos   =   dlg.GetStartPosition();  
                    CString FileName; 
                    while   (pos   !=   NULL)   
                    {   
                          FileName = dlg.GetNextPathName(pos);   
                          AfxMessageBox(FileName); 
//顯示所選的多個檔案的路徑
nCount++;   //記錄所選檔案的數目
                    }   
                    CString   str;   
                    str.Format("Successfully   opened   %d   files/n",   nCount);   
                    AfxMessageBox(str);   
              }   
              else   if(iReturn   ==   IDCANCEL)   
                    AfxMessageBox("Cancel");   
    
              if(CommDlgExtendedError()   ==   FNERR_BUFFERTOOSMALL)   
                    AfxMessageBox("BUFFERTOOSMALL");   
              delete   [] pc;
   看起來還是比較麻煩的,有可能是因為我們沒有認真地去弄明白裡面的每一個引數到底是幹什麼用的,所以看到這麼多引數,就感覺不舒服,我也是。當然,如果去看看這些類是怎麼回事,倒會好些。

相關推薦

VC開啟瀏覽檔案對話方塊瀏覽資料對話方塊

今天,又看了這些東西,在VC裡面建立瀏覽檔案對話方塊比建立瀏覽資料夾對話方塊要簡單一些。 一、建立“瀏覽檔案對話方塊”         用CFileDialog類實現,比如:      CFileDialog  FDlg(TRUE , ".doc" , NULL , OF

VC++開啟儲存檔案對話方塊瀏覽資料對話方塊

一。開啟資料夾: 1。CFileDialog實現 CFileDialog hFileDlg(true,NULL ,   NULL,   OFN_FILEMUSTEXIST | OFN_READONLY | OFN_PATHMUSTEXIST,   TEXT("驅動檔案 (*.

VC開啟瀏覽資料對話方塊

TCHAR szPathName[MAX_PATH];CString str = L"";CString strDir = L"";//選擇的目錄TCHAR szTitle[] = _T("選擇清除路徑");memset(&bi,0,sizeof(BROWSEINFO));memset(szPath

C# 瀏覽資料獲得資料及子目錄下的所有檔案

FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.Description = "請選擇檔案路徑"; if (dialog.ShowDialog() ==

C# 選擇檔案選擇資料開啟檔案(或者資料

1、選擇檔案用OpenDialog OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;//該值確定是否可以選擇多個檔案 dialog.Title = "請選擇資料夾"; dialog.Filter = "

C# 選擇檔案選擇資料開啟檔案(或者資料) 路徑中獲取檔案全路徑目錄副檔名檔名稱 追加拷貝刪除移動檔案建立目錄 修改檔名資料名!!

https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1、選擇檔案用OpenDialog OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;/

WPF選擇檔案資料對話方塊

WPF提供了選擇檔案對話方塊,但並沒有提供選擇資料夾的對話方塊。 OpenFileDialog類存在於PresentationFramework.dll程式集。 1 public string SelectFileWpf() 2 { 3 var open

關於VC彈出選擇資料對話方塊

VC程式設計中經常需要彈出選擇資料夾對話方塊供使用者選擇目標資料夾 基本實現的原始碼如下: 1 void CTestDlg::OnBtnTest() 2 { 3 // TODO: Add your control notification handler code here 4

Excel VBA 開啟對話方塊,獲取資料路徑

Excel 開啟對話方塊,獲取資料夾路徑 'Window「參照」ダイアログで選択したItem 名を取得 Public Function GetFolderName(ByVal DialogType As MsoFileDialogType) As String W

通過shell終端直接開啟socket檔案進行TCPUDP通訊

linux中有一個特殊的檔案/dev/tcp,開啟這個檔案就類似於發出了一個socket呼叫,建立一個socket連線,讀寫這個檔案就相當於在這個socket連線中傳輸資料。 開啟/dev/tcp 以讀寫方式開啟/dev/tcp,並指定伺服器名為: www.c

MFC開啟資料對話方塊初始化開啟路徑

使用MFC開發程式時,有時需要選擇資料夾,可使用SHBrowseForFolder解決,但此方法並不支援初始化選擇路徑。 開啟資料夾對話方塊,程式碼如下: BROWSEINFO bi; TCHAR Buffer[MAX_PATH]; bi.hwndOwner = NU

【python修改檔案】帶引數修改資料資料裡檔名檔案內容等

原始碼如下: # -*- coding: utf-8 -*- #coding=utf-8 ''' 指令碼說明 功能:在新增新遙控時,需要手動改檔名和檔案內容。現執行指令碼可自動修改(碼值仍需要手動修改) 使用:python ir_modify.py "原有的檔名"

SprinMVC轉發重定向收集date資料自定義轉換器檔案上傳json資料轉換

1.專案模組圖 2.完成SpringMVC的基本搭建 pom.xml(下載jar包的檔案) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.

C#如何操控FTP,獲取FTP檔案資料列表,獲取FTP檔案大小,FTP上傳,FTP刪除檔案,FTP新建資料刪除資料

C#如何操控FTP 出處:http://www.cnblogs.com/rond/archive/2012/07/30/2611295.html,http://www.cnblogs.com/rond   關於FTP的應用免不了要對FTP進行增刪查改什麼的。通過搜尋,整理和修改

(圖文)SVN檔案/資料圖示顏色不顯示問題解決辦法SVN資料檔案狀態圖示顯示不正常

svn檢出的資料夾上沒有綠色的對號,或者紅色的感嘆號標識。仍然是windows預設的資料夾。 解決方法: 首先,用win+R鍵開啟 執行 視窗,裡面輸入regedit(登錄檔),確定進入 首先我們找到localmachine,點選進入,下面找到software,展開下面的節點 在sof

用VB實現重新命名拷貝資料檔案

用VB實現重新命名、拷貝資料夾及檔案 Private Sub commandButton1_Click() '宣告資料夾名和路徑 Dim FileName, Path As String, EmptySheet As String 'Path = "D:\上報" Path = Inp

自定義樣式的資料對話方塊 FolderBrowserDialog

說明:我們選擇資料夾就要使用net自帶的folderBrowserDialog,但是這個dialog看上去並不是非常好看 因此使用IFileOpenDialog介面重寫了一個folderBrowserDialog,可以實現類似OpenFileDialog的樣式效果圖:  是

javaSE (三十二)找出字串中重複的元素並寫入檔案模擬正版軟體使用次數期限獲取資料下的全部java檔案

1、找出字串中重複的元素並寫入檔案: 問題:鍵入(或者從一個檔案中讀取)一個字串,找出字串中重複的元素並寫入檔案 思路: 鍵入字串 map儲存 寫入檔案 程式碼: package cn.njupt; /* * * 鍵入一串字元,計算每個字元出

雲展網教程 | 編輯書櫥標題密碼開啟方式同步資料

雲展網提供了書櫥功能,方便使用者通過書櫥整合展示一系列書籍。下面我們對書櫥的相應內容進行設定: 標題:書櫥的名稱,顯示在書櫥上方,微信等分享平臺分享書櫥時顯示的標題。 密碼:使用者訪問書櫥需要輸入密碼才能看見書籍。密碼設定可見情況下設定。 同步資料夾:勾選是否同步資料夾,選擇是的情

MFC下對檔案資料的操作(複製剪下刪除建立資料,寫檔案)

1 void CFileOperationDlg::OnButtonCopy() 2 { 3 // TODO: Add your control notification handler code here 4 UpdateData(TRUE); 5 CString m_