VC++ 打開文件夾,保存文件等對話框的調用

VC++ 打開文件夾,保存文件等對話框的調用

一。打開文件夾: 瀏覽器

1。CFileDialog實現 網絡

CFileDialog hFileDlg(true,NULL ,
NULL,
   OFN_FILEMUSTEXIST | OFN_READONLY | OFN_PATHMUSTEXIST,
TEXT("驅動文件 (*.sys)|*.sys|全部文件(*.*)|*.*|"),
NULL);
if(hFileDlg.DoModal() == IDOK)
{
m_path = hFileDlg.GetPathName();
UpdateData(FALSE);
} 函數

2。API實現 指針


OPENFILENAMEA ofn;       
char szFile[260];       

ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "音頻文件\0*.wma\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = 0;


if (GetOpenFileNameA(&ofn)==FALSE) 
return S_FALSE;

CString c_save_path=ofn.lpstrFile; 索引

2、保存文件 事件

同上,只不過將「 CFileDialog hFileDlg(true,NULL 」改成「 CFileDialog hFileDlg(false,NULL 」,或者將GetOpenFileNameA改成GetSaveFileNameA,便可。 圖片

3、瀏覽文件夾對話框 內存

//回調函數
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
    if(uMsg==BFFM_SELCHANGED||uMsg==BFFM_INITIALIZED)
    {
        if(uMsg==BFFM_INITIALIZED)
        {
            ::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,
                LPARAM(lpData));
        }
    }
    return 0;
} 字符串


TCHAR chPath[255]; //用來存儲路徑的字符串
CString strPath = "";
BROWSEINFO bInfo;
GetModuleFileName(NULL,chPath,MAX_PATH);
strPath=chPath;
ZeroMemory(&bInfo, sizeof(bInfo));
bInfo.hwndOwner = m_hWnd;
bInfo.lpszTitle = _T("請選擇路徑: ");     
bInfo.ulFlags   = BIF_RETURNONLYFSDIRS|BIF_EDITBOX;
bInfo.lpfn      = BrowseCallbackProc;
bInfo.lParam    = (LPARAM)strPath.GetBuffer(strPath.GetLength()); 回調函數

LPITEMIDLIST lpDlist; //用來保存返回信息的IDList
lpDlist = SHBrowseForFolder(&bInfo) ; //顯示選擇對話框
if(lpDlist != NULL) //用戶按了肯定按鈕
{
SHGetPathFromIDList(lpDlist, chPath);//把項目標識列表轉化成字符串
strPath = chPath; //將TCHAR類型的字符串轉換爲CString類型的字符串
m_save_path=strPath;
UpdateData(FALSE);
}

對應事件加入下面代碼:

BROWSEINFO   BrowseInfo; 
memset(&BrowseInfo,0,sizeof(BROWSEINFO)); 
LPITEMIDLIST   pItemID; 
BrowseInfo.hwndOwner=NULL;//m_hWnd; //非模態 
BrowseInfo.pidlRoot=NULL; 
BrowseInfo.ulFlags=BIF_BROWSEINCLUDEFILES; 
BrowseInfo.lpfn=NULL;//BrowseCallBackProc; 
   
pItemID=SHBrowseForFolder(&BrowseInfo); 
if(pItemID) 

char   szPath[MAX_PATH]; 
if(SHGetPathFromIDList   (pItemID,szPath)) 

   IMalloc*   pMalloc; 
   if(SUCCEEDED(::Co GetMalloc_r(1,&pMalloc))) 
   { 
    pMalloc->Free(pItemID); 
    pMalloc->Release(); 
   } 

m_strDFilePath = szPath; //m_strDFilePath 存儲了文件路徑
UpdateData(FALSE);
//MessageBox("設置路徑成功,圖片將存於 "+m_strDFilePath);
}

BROWSEINFO說明
  Visual C++(VC)中,BROWSEINFO結構中包含有用戶選中目錄的重要信息。

  (1)BROWSEINFO結構

  ●定義

  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結構的地址,包含瀏覽時的初始根目錄,並且只有被指定的目錄和其子目錄才顯示在瀏覽文件夾對話框中。該成員變量能夠是NULL,在此時桌面目錄將被使用。

  pszDisplayName:用來保存用戶選中的目錄字符串的內存地址。該緩衝區的大小缺省是定義的MAX_PATH常量宏。

  lpszTitle:該瀏覽文件夾對話框對話框的顯示文本,用來提示該瀏覽文件夾對話框的功能、做用和目的。

  ulFlags:該標誌位描述了對話框的選項。它能夠爲0,也能夠是如下常量的任意組合:

  BIF_BROWSEFORCOMPUTER:返回計算機名。除非用戶選中瀏覽器中的一個計算機名,不然該對話框中的「OK」按鈕爲灰色。

  BIF_BROWSEFORPRINTER:返回打印機名。除非選中一個打印機名,不然「OK」按鈕爲灰色。

  BIF_BROWSEINCLUDEFILES:瀏覽器將顯示目錄,同時也顯示文件。

  BIF_DONTGOBELOWDOMAIN:在樹形視窗中,不包含域名底下的網絡目錄結構。

  BIF_EDITBOX:瀏覽對話框中包含一個編輯框,在該編輯框中用戶能夠輸入選中項的名字。

  BIF_RETURNFSANCESTORS:返回文件系統的一個節點。僅僅當選中的是有意義的節點時,「OK」按鈕才能夠使用。

  BIF_RETURNONLYFSDIRS:僅僅返回文件系統的目錄。例如:在瀏覽文件夾對話框中,當選中任意一個目錄時,該「OK」按鈕可用,而當選中「個人電腦」或「網上鄰居」等非有意義的節點時,「OK」按鈕爲灰色。

  BIF_STATUSTEXT:在對話框中包含一個狀態區域。經過給對話框發送消息使回調函數設置狀態文本。

  BIF_VALIDATE:當沒有BIF_EDITBOX標誌位時,該標誌位被忽略。若是用戶在編輯框中輸入的名字非法,瀏覽對話框將發送BFFM_VALIDATEFAILED消息給回調函數。

  lpfn:應用程序定義的瀏覽對話框回調函數的地址。當對話框中的事件發生時,該對話框將調用回調函數。該參數可用爲NULL。

  lParam:對話框傳遞給回調函數的一個參數指針。

  iImage:與選中目錄相關的圖像。該圖像將被指定爲系統圖像列表中的索引值。

相關文章
相關標籤/搜索