用CFileDialog选择了一个文件后,使用FILE::fopen打开文件错误,使用 的是相对地址。和王工调试了半天,怎么跟踪也没发现错误,原来如此。

。。。。

。。

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 是最重要的一个參数。它指明可供选择的文件类型和对应的扩展名。參数格式如:

    "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间能够用 ; 切割。每种文件类型间用 | 分隔,末尾用 || 指明。

  • pParentWnd 为父窗体指针。

创建文件对话框能够使用DoModal(),在返回后能够利用以下的函数得到用户选择:

  • CString CFileDialog::GetPathName( ) 得到完整的文件名称。包含文件夹名和扩展名如:c:\test\test1.txt
  • CString CFileDialog::GetFileName( ) 得到完整的文件名称,包含扩展名如:test1.txt
  • CString CFileDialog::GetExtName( ) 得到完整的文件扩展名。如:txt
  • CString CFileDialog::GetFileTitle ( ) 得到完整的文件名称,不包含文件夹名和扩展名如:test1
  • POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。

  • CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同一时候返回当前文件名称。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。

[一些小心得]

例:

CFileDialog GetFile(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,"Microsoft Excel(*.xls)|*.xls|All Files(*.*)|*.*");

CFileDialog GetFile(打开文件对话框(TRUE),扩展名(NULL),文件名称(NULL),风格-文件必须存在(OFN_FILEMUSTEXIST),查看文件类型-EXCEL文件,全部文件(Microsoft Excel(*.xls)|*.xls|All Files(*.*)|*.*);

风格的宏定义

#define OFN_READONLY                 0x00000001

#define OFN_OVERWRITEPROMPT          0x00000002

#define OFN_HIDEREADONLY             0x00000004

#define OFN_NOCHANGEDIR              0x00000008

#define OFN_SHOWHELP                 0x00000010

#define OFN_ENABLEHOOK               0x00000020

#define OFN_ENABLETEMPLATE           0x00000040

#define OFN_ENABLETEMPLATEHANDLE     0x00000080

#define OFN_NOVALIDATE               0x00000100

#define OFN_ALLOWMULTISELECT         0x00000200

#define OFN_EXTENSIONDIFFERENT       0x00000400

#define OFN_PATHMUSTEXIST            0x00000800

#define OFN_FILEMUSTEXIST            0x00001000

#define OFN_CREATEPROMPT             0x00002000

#define OFN_SHAREAWARE               0x00004000

#define OFN_NOREADONLYRETURN         0x00008000

#define OFN_NOTESTFILECREATE         0x00010000

#define OFN_NONETWORKBUTTON          0x00020000

#define OFN_NOLONGNAMES              0x00040000     // force no long names for 4.x modules

#if(WINVER >= 0x0400)

#define OFN_EXPLORER                 0x00080000     // new look commdlg

#define OFN_NODEREFERENCELINKS       0x00100000

#define OFN_LONGNAMES                0x00200000     // force long names for 3.x modules

#define OFN_ENABLEINCLUDENOTIFY      0x00400000     // send include message to callback

#define OFN_ENABLESIZING             0x00800000

#endif

#if (_WIN32_WINNT >= 0x0500)

#define OFN_DONTADDTORECENT          0x02000000

#define OFN_FORCESHOWHIDDEN          0x10000000    // Show All files including System and hidden files

#endif // (_WIN32_WINNT >= 0x0500)

须要注意的是,用了CFileDialog之后,会把程序的当前路径设置成选中文件的路径;

所以,假设程序里实用到IO訪问或者数据库訪问之类的本地操作时,须要注意你的当前路径用相对路径的话就不是原来你的程序路径了,切记!

CString GetFilePath()
{

CString m_FilePath;

GetModuleFileName(NULL,m_FilePath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);

m_FilePath.ReleaseBuffer();

int m_iPosIndex;

m_iPosIndex = m_FilePath.ReverseFind('\\');

m_FilePath = m_FilePath.Left(m_iPosIndex);

return m_FilePath;

}

MFC中CFileDialog使用方法的更多相关文章

  1. MFC中CFileDialog用法

    用CFileDialog选择了一个文件后,使用FILE::fopen打开文件错误,使用 的是相对地址,和王工调试了半天,怎么跟踪也没发现错误,原来如此......... CFileDialog文件选择 ...

  2. MFC中对基于ODBC对数据ACCESS数据库的增删改查。

    在MFC中可以使用很多方法对数据库进行操作. 什么ODBC  什么ADO之类的,这里要介绍使用的ODBC这种方法,通过本文的阅读可以达初步掌握在MFC里面通过ODBC访问ACCESS数据库. 涉及到的 ...

  3. MFC中使用SDL播放音频没有声音的解决方法

    本文所说的音频是指的纯音频,不包含视频的那种. 在控制台中使用SDL播放音频,一般情况下不会有问题. 但是在MFC中使用SDL播放音频的时候,会出现没有声音的情况.经过长时间探索,没有找到特别好的解决 ...

  4. MFC中的CString类使用方法指南

    MFC中的CString类使用方法指南 原文出处:codeproject:CString Management [禾路:这是一篇比较老的资料了,但是对于MFC的程序设计很有帮助.我们在MFC中使用字符 ...

  5. MFC中获取命令行参数的几种方法

    在MFC程序中,可以用以下几种方法来获取命令行参数. 为方便说明,我们假设执行了命令:C:\test\app.exe -1 -2 方法一 ::GetCommandLine(); 将获取到 " ...

  6. MFC中获取各个窗口之间的句柄或者指针对象的方法

    MFC在非常多的对话框操作中,我们常常要用到在一个对话框中调用还有一个对话框的函数或变量.能够用例如以下方法来解决.    HWND hWnd=::FindWindow(NULL,_T("S ...

  7. VC++/MFC中调用CHM帮助文档的方法

    转载:http://blog.csdn.net/hediping9811/article/details/23341387 (1)用Word编辑好帮助文档,并保存为网页格式,如mhtml格式. (2) ...

  8. VS2010 MFC中 创建文件夹及文件判空的方法

    1. MFC中 创建文件夹的方法如下: CString strFolderPath = "./Output"; //判断路径是否存在 if(!PathIsDirectory(str ...

  9. MFC中 自定义类访问主对话框控件的方法

    之前一直在找有木有好点的方法.现在终于被我找到,收藏之~~~~~~ 在使用mfc的时候经常遇到自定义类访问主对话框控件的问题,例如自定义类中的方法要输出一段字符串到主对话框的EDIT控件.控制对话框的 ...

随机推荐

  1. 【BZOJ 1266】 [AHOI2006]上学路线route

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 第一问是个最短路. 第二问. 利用第一问floyd算出来的任意两点之间的最短路. 那么枚举每一条边(x,y) 如果w[1][x]+c ...

  2. TCL命令(事务控制)

     确认提交DML操作:commit;     撤销DML操作:rollback;         提示:rollback撤销的是与上一个commit之间          所做的DML操作.注意:仅对 ...

  3. 5.3.5 namedtuple() 创建命名字段的元组结构

    在命名元组里.给每一个元组的位置加入一个名称,而且能够通过名称来訪问.大大地提高可读性,以便写出清晰代码,提高代码的维护性.事实上它就像C++里的结构体. collections.namedtuple ...

  4. [Angular] Set Metadata in HTTP Headers with Angular HttpHeaders

    Besides sending (or requesting) the actual data to the server API, there’s also often the need to se ...

  5. C++开发人脸性别识别教程(7)——搭建MFC框架之界面绘制

    在之前的博客中我们已经将项目中用到的算法表述完成,包含人脸检測算法以及四种性别识别算法,在这篇博客中我们将着手搭建主要的MFC框架. 一.框架概况 在这篇博文中我们将搭建最主要的MFC框架.绘制MFC ...

  6. Revit二次开发实现BIM盈利(以橄榄山快模为例解说) 视频讲座下载

    应笔墨闲谈群的邀请, 在10月11号晚8:30分在其群做了一次关于BIM二次开发的讲座. 因为參与者基本上都是从设计院和施工单位来的,所以对Revit二次开发做了纵览性的解说, 以非程序猿能听懂的方式 ...

  7. WAP 图片 lazyload

    原理是根据屏幕上的坐标找到需要做 lazyload 的区域 1,先监听 scroll 事件 ,scrolling_lt window.addEventListener('scroll', functi ...

  8. Cocos2d-x 常见宏

    1)NS_CC_BEGIN cocos2d命名空间開始 2) NS_CC_END  cocos2d命名空间结束 3)USING_NS_CC 声明cocos2d命名空间 4)CC_SYNTHESIZE_ ...

  9. ios学习--第三方框架-MBProgressHUD以及扩展

    MBProgressHUD提示框官网地址:https://github.com/jdg/MBProgressHUD 一. 模式 首先, MBProgressHUD有以下几种视图模式. typedef ...

  10. 从SQL注入谈数据访问层

    什么是SQL注入? SQL注入就是应用程序的开发人员未预期的吧SQL语句传入到应用程序的过程,如果直接使用用户输入的值来构建SQL语句的应用程序是很可能会受到SQL注入攻击的.特别是基于浏览器的网络应 ...