Windows下,文件(夹)选择/打开对话框的三种创建方式

Windows编程时,常用到打开文件(夹)对话框,选择文件或者多个文件的功能。Windows提供了好几种方式,现在做个总结,也好方便以后的使用。
常用的方式有三种:

1.1 使用OPENFILENAME这个结构体和GetOpenFileName()函数

这种方式在于能够可以实现单选文件或者多选文件的功能。多选时,只需按照字符串的拼接格式进行split即可。

打开单文件的代码:

    char szFilePath[1024] = {0};   // 所选择的文件最终的路径
    OPENFILENAME ofn= {0};   
    ofn.lStructSize = sizeof(ofn);   
    ofn.hwndOwner = m_hWnd;   
    ofn.lpstrFilter = "txt文件(*.txt)\0";//要选择的文件后缀   
    ofn.lpstrInitialDir = "./";//默认的文件路径   
    ofn.lpstrFile = szFilePath;//存放文件的缓冲区   
    ofn.nMaxFile = sizeof(szFilePath)/sizeof(*szFilePath);   
    ofn.nFilterIndex = 0;   
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER ; //标志如果是多选要加上OFN_ALLOWMULTISELECT 
    if (!GetOpenFileName(&ofn))
    {
        return ;
    }
    if (strcmp(szFilePath, "") == 0)
    {
        // 检验是否获取成功
        return ;
    }

效果图:
效果图

1.2 使用SHBrowseForFolder调用

此种功能,是产生文件浏览的特效。可以选择文件或者文件夹。

选择文件代码示例:

    char szFilePath[1024] = {0};   // 所选择的文件最终的路径
    BROWSEINFO bi;   
    ZeroMemory(&bi,sizeof(BROWSEINFO));   
    bi.hwndOwner = NULL;   
    bi.pszDisplayName = szFilePath;   
    bi.lpszTitle = ("从下面选择文件或文件夹:");   
    bi.ulFlags = BIF_BROWSEINCLUDEFILES;   
    LPITEMIDLIST idl = SHBrowseForFolder(&bi);   
    if (NULL == idl)   
    {   
        return;   
    }   
    SHGetPathFromIDList(idl,szFilePath);  
    if (strcmp(szFilePath, "") == 0)
    {
        // 检验是否获取成功
        return ;
    }

效果图:
效果图2

1.3 使用系统的CFileDialog

CFileDialog是系统提供的打开和保存文件对话框类。可以弹出打开文件对话框,也可以弹出保存文件对话框。功能相比比较丰富。

在介绍如何使用之前,着重介绍其构造函数的定义。这是关键。

1.3.1 构造函数 CFileDialog()
CFileDialog::CFileDialog( 
        BOOL bOpenFileDialog, 
        LPCTSTR lpszDefExt = NULL, 
        LPCTSTR lpszFileName = NULL, 
        DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
        LPCTSTR lpszFilter = NULL, 
        CWnd* pParentWnd = NULL );

参数意义如下:
- bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。
- lpszDefExt 指定默认的文件扩展名。
- lpszFileName 指定默认的文件名。
- dwFlags 指明一些特定风格。
- lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。

参数格式如:
"Worksheet Files (*.xls)|*.xls;*.xlsx|text Files (*.txt)|*.txt|All Files (*.*)|*.*||";
文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
- pParentWnd 指明父窗口

该函数未指明选择文件对话框的默认选择路径,一般情况是当前路径。

1.3.2 选择打开文件对话框的使用

一般情况下,通过构造函数构造一个CFileDialog类对象,通过doModel函数来弹出相应的对话框,用户在对话框中选中文件,点击确定,即可获取到该文件的路径。保存文件对话框类似。

打开文件对话框示例代码:

    char szFilePath[1024] = {'\0'};
    CString filter("文本文档(*.txt)|*.txt|All Files (*.*)|*.*||");  
    CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter);  
    if(dlg.DoModal()==IDOK)  
    {  
        strcpy(szFilePath, dlg.GetPathName().GetBuffer(0)) ;
    }  
    else
    {
        return ;
    }

    if (strcmp(szFilePath, "") == 0)
    {
        return ;
    }

效果图:
效果图3

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如何修复“Windows/System32/Config/System中文件丢失或损坏”故障 如何修复“Windows/System32/Config/System中文件丢失或损坏”故障 此类错误通常说明计算机因为注册表的原因不能启动,下列操作应该能够修正以上错误。然而,需要特别注意的是,你需要将5个注册表区域全部进行替换。只简单的替换一个或者两个将会潜在的导致其他的错误 注意 如果你使用的是WindowsXP的OEM版本,那么你不应该使用方法2。否则,你的操作系统将不再可用。OEM安装版本创建了事先不存在的用户名和密码。因此,对于你个人来讲,下面的操作指导不会解决问题。对于OEM版本XP的最简单方法是使用制造商提供的恢复盘重新安装XP系统 简单方法 1/重启机器 2/按住F8键,直到出现菜单 3/菜单出现后,使用方向键选择“最近一次正确的配置”选项 4/按回车键 5/此时,计算机应该重新安装最近一次的正常启动所使用的配置文件 6/重启计算机 7/如果仍然存在问题,那么采用下面的复杂方法 复杂方法 第一步 1/将Windows XP的安装光盘放入光驱,重启计算机 2/在“欢迎使用安装程序”界面,按R键,进入恢复控制台 3/在恢复控制台中会显示当前Windows的安装列表 4/你需要根据你所安装的Windows XP系统的路径选择相应的数字。如果你仅仅安装了一个单系统,那么应该选择1 5/此时,需要你输入管理员Administrator用户的密码。如果你以前没有设过此密码,那么直接按回车键即可 6/如果密码正确,那么将恢复控制台提示符,进入恢复控制台命令交互界面 7/在恢复控制台提示符后键入下述命令,每一行命令用回车键结束 md tmp copy c:/windows/system32/config/system c:/windows/tmp/system.bak copy c:/windows/system32/config/software c:/windows/tmp/software.bak copy c:/windows/system32/config/sam c:/windows/tmp/sam.bak copy c:/windows/system32/config/security c:/windows/tmp/security.bak copy c:/windows/system32/config/default c:/windows/tmp/default.bak delete c:/windows/system32/config/system delete c:/windows/system32/config/software delete c:/windows/system32/config/sam delete c:/windows/system32/config/security delete c:/windows/system32/config/default copy c:/windows/repair/system c:/windows/system32/config/system copy c:/windows/repair/software c:/windows/system32/config/software copy c:/windows/repair/sam c:/windows/system32/config/sam copy c:/windows/repair/security c:/windows/system32/config/security copy c:/windows/repair/default c:/windows/system32/config/default 8/在上述命令执行完毕后,键入Exit,退出恢复控制台 9/重启计算机 第二步 10/计算机重新启动后使用Administrator身份登录。如果你使用的是Windows XP Home版,那么你只能在“安全模式”中使用Administrator身份登录。 11/下一个操作是使用系统备份工具将注册表文件拷贝至备份路径。然而,在进行备份之前,你需要在文件管理器的“文件夹选项”中设置“显示所有文件文件夹”及“隐藏受保护的操作系统文件”。(操作步骤12-19为设置设置“显示所有文件文件夹”及“隐藏受保护的操作系统文件”的方法,如果熟悉此操作,可直接跳至操作步骤20) 12/打开文件管理器 13/选择菜单中“工具” 14/选择文件夹选项” 15/选择“查看”选项卡 16/在高级设置中找到“显示所有文件文件夹”及“隐藏受保护的操作系统文件” 17/选择“显示所有文件文件夹” 18/去除对“隐藏受保护的操作系统文件”的选择 19/出现提示框,显示编辑或删除操作系统文件将破坏系统,选择“是”。选择“确定”,关闭“文件夹选项”对话框 20/在文件管理器中进入Windows XP的安装目录。 21/打开“System Volume Information”目录,如果此目录不可存取,可根据错误信息查看微软知识库文章309531 22/在“System Volume Information”目录中可以看到一个或多个类似“_restore{87BD3667-3246-476B-923F-F86E30B3E7F8}”的目录 23/如果目录以图标方式或者是缩略图方式显示,请选择“查看”菜单项中的详细资料选项 24/选择一个以RP开头的,并且不是在当前时间创建文件(这些文件为还原点,Restore Points) 25/进入这些目录中的某一个,并找到其中的Snapshot目录。比如C:/System Volume Information/_restore{D86480E3-73EF-47BC-A0EB-A81BE6EE3ED8}/RP1/Snapshot 26/在Snapshot目录中拷贝如下文件到“C:/Windows/tmp”目录 _REGISTRY_USER_.DEFAULT _REGISTRY_MACHINE_SECURITY _REGISTRY_MACHINE_SOFTWARE _REGISTRY_MACHINE_SYSTEM _REGISTRY_MACHINE_SAM 27/将“C:/Windows/tmp”目录中的这些文件按照如下方式进行重命名 重命名 _REGISTRY_USER_.DEFAULT 为 DEFAULT 重命名_REGISTRY_MACHINE_SECURITY为SECURITY 重命名_REGISTRY_MACHINE_SOFTWARE为SOFTWARE 重命名_REGISTRY_MACHINE_SYSTEM为SYSTEM 重命名_REGISTRY_MACHINE_SAM为SAM 第三步 28/现在你必须删除现有的注册表文件,并且将新的注册表文件拷贝至“C:/Windows/System32/Config”目录。你可以通过使用恢复控制台或者Windows 98启动盘(如果系统所在分区的文件格式为FAT32)进行此项操作。在命令提示符后输入如下命令: del c:/windows/system32/config/sam del c:/windows/system32/config/security del c:/windows/system32/config/software del c:/windows/system32/config/default del c:/windows/system32/config/system 29/接着输入如下命令: copy c:/windows/tmp/software c:/windows/system32/config/software copy c:/windows/tmp/system c:/windows/system32/config/system copy c:/windows/tmp/sam c:/windows/system32/config/sam copy c:/windows/tmp/security c:/windows/system32/config/security copy c:/windows/tmp/default c:/windows/system32/config/default 30/最后退出恢复控制台,并重启计算机 第四步 31/计算机重新启动,并进入系统后,选择“开始” 32/选择“全部程序”中的“附件” 33/选择“系统还原” 34/将系统还原至某一个以前的还原点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值