VC++实现文件选择对话框 及目录

来源:互联网 发布:仓廪实而知礼节出自 编辑:程序博客网 时间:2024/05/21 09:50

VC++实现文件选择对话框 及目录  

2010-04-26 22:19:49|  分类:默认分类 |  标签:|字号 订阅

char Filter[]="所有文件(*.*)|*.*||";
    CFileDialog dlgOpen(TRUE,
0,0,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,(LPCTSTR)Filter,NULL);
    
if(dlgOpen.DoModal()==IDOK)
    {
        m_fName
=dlgOpen.GetPathName();
        FileTitle
=dlgOpen.GetFileName(); //取得要分割的文件名(不包含路径、扩展名)
    }
    
else return ;


SHBrowseForFolder 函数

定义:WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder(LPBROWSEINFO lpbi);

说明:显示一个对话框,供用户选择一个文件夹路径。

      返回an item identifier list的地址,这个地址指示选中文件夹相对于命名空间根的地方;

      如果用户选择取消,则返回NULL。

参数:

    lpbi    BROWSEINFO结构的地址,指示显示对话框。

BROWSEINFO

定义:

typedef struct _browseinfo {

    HWND hwndOwner;

    LPCITEMIDLIST pidlRoot;

    LPSTR pszDisplayName;

    LPCSTR lpszTitle;

    UINT ulFlags;

    BFFCALLBACK lpfn;

    LPARAM lParam;

    int iImage;

} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;

说明:SHBrowseForFolder函数的参数。

成员变量:

    hwndOwner:浏览文件夹对话框的父窗体的句柄。

    pidlRoot:ITEMIDLIST结构的地址。包含浏览时的初始根目录,只有被指定的目录和子目录时才显示在浏览文件夹对话框中。可以为NULL,此时桌面目录将被使用。

    pszDisplayName:保存用户选中的目录字符串的地址,一个缓冲区。缓冲区缺省大小事MAX_PATH。

    lpszTitle:该浏览文件夹对话框的显示文本,用来提示该浏览文件夹对话框的功能、作用和目的。

    ulFlags:指定对话框的选项。可以为0,也可以是以下值的组合。

        BIF_BROWSEFORCOMPUTER:只能返回计算机,否则确定为灰色。

        BIF_BROWSEFORPRINTER:只能返回打印机,否则确定为灰色。

        BIF_BROWSEINCLUDEFILES:文件和文件夹都会在浏览对话框中显示。

        BIF_DONTGOBELOWDOMAIN:不包括网络文件夹。

        BIF_EDITBOX:浏览对话框中包含一个编辑控件,用户可以键入项目名字。

        BIF_RETURNFSANCESTORS:只返回文件,否则确定为灰。

        BIF_RETURNNONLYFSDIRS:只返回文件夹,否则确定为灰。

        BIF_STATUSTEXT:浏览对话框包含一个状态栏。

        BIF_VALIDATE:用户在编辑框中键入无效名称时,浏览对话框会调用BrowseCallbackProc返回BFFM_VALIDATEFAILED消息。如果BIF_EDITBOX没被指定,则忽略之。

    lpfn:详细信息参看BrowseCallbackProc函数。可以为NULL。

    lParam:

    iImage:




/选择目录
void CTestDlg::OnOK() 
{
// BROWSEINFO 结构
////////////////////////////////////
// typedef struct _browseinfo {
//   HWND hwndOwner;
//   LPCITEMIDLIST pidlRoot;
//   LPSTR pszDisplayName;
//   LPCSTR lpszTitle;
//   UINT ulFlags;
//   BFFCALLBACK lpfn;
//   LPARAM lParam;
//   int iImage;
//   } BROWSEINFO;
///////////////////////////////////


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);
TRACE("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
TRACE(sFolderPath);
TRACE("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}


//打开、保存文件
void CTestDlg::OnButton1() 
{
    
// 获取当前工作路径
CString strAppName;//当前工作目录
::GetModuleFileName(NULL, strAppName.GetBuffer(_MAX_PATH), _MAX_PATH);
strAppName.ReleaseBuffer();
int nPos = strAppName.ReverseFind('\\');
strAppName = strAppName.Left(nPos + 1);

    // AfxMessageBox(strAppName);


// 文件扩展名过滤器
LPCTSTR szFilter = "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";

    //初始目录是c:\windows, 初始选择的文件名是test,初始后缀过滤器是 Chart Files (*.xlc)
//CFileDialog dlg(TRUE,NULL ,"C:\\windows\\test" ,OFN_ENABLESIZING ,szFilter,NULL); // 打开用TRUE, 保存用 FALSE

//第一个参数变成FALSE,就是保存文件,初始目录是当前工作目录, 初始选择的文件名是file,初始后缀过滤器是 Chart Files (*.xlc)
CFileDialog dlg(FALSE,NULL ,strAppName+"file",OFN_ENABLESIZING ,szFilter,NULL); // 打开用TRUE, 保存用 FALSE
    
    

if(dlg.DoModal() == IDOK)
{
   CString strFile = dlg.GetPathName(); // 全路径
   MessageBox(strFile,"Title",MB_OK);
   TRACE("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
   TRACE(strFile);
   TRACE("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}


}

原创粉丝点击