用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. ASP.NET-优化websit

    如何优化一个网站 1.如果是数据库的问题则尝试添加索引.优化SQL语句,如果是算法的问题,则优化算法. 2.如果对于一些不经常改动的页面可以使用静态页技术! 3.对于一些数据不需要及时更新的而且取数据 ...

  2. 2)Win10-UWA开发 API參考 - 1

    孙广东  2015.8.23 大多数 Windows 执行时 API 如今适用于 Windows Phone 应用商店应用以及 Windows 应用商店应用,这意味着当你创建同一时候面向 Window ...

  3. 【跟我一步一步学Struts2】——拦截器

    前言 前面提到过拦截器.而且说拦截器仅仅能拦截Action.这里拦截器的调用体现了责任链模式.为什么说体现了责任链模式呢? 以下的一段话说的非常明确: Struts2将整个运行划分成若干同样类型的元素 ...

  4. MVVM 中 ViewModelBase和 CommandBase

    public class ViewModelBase : INotifyPropertyChanged , IDisposable { public virtual string DisplayNam ...

  5. Python爬糗百热门20条并邮件分发+wxPython简易GUI+py2app转成可运行文件

    学了一阵子Python,拿来做个什么有意思的东西呢?爬糗百好了.爬到的内容,邮件分发出去. 然后又啃了两天的wxpython,做了个简易的邮件管理界面,能够在这里添加或者删除邮件,而且一键爬虫发送. ...

  6. 发送HTTP请求 -- HttpUtil

    1. package com.step.utils; import java.io.IOException; import java.net.URLDecoder; import java.util. ...

  7. 15-11-24 system同步与异步

    //打开关闭qq #define _CRT_SECURE_N0_WARNINGS #define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #i ...

  8. 【参考】Linux下的Memcache安装

    服务器端主要是安装memcache服务器端.下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz另外,Memcache用到了lib ...

  9. <Three.js>(第三节)全景漫游

    一.实验内容 通过上次实验,了解了Three.js创建场景的基本步骤.这一节,我们将通过Three.js实现全景漫游功能.如下图: 全景图是获取一个3D场景中的不同角度的图片,然后通过拼接.融合实现3 ...

  10. UWP连接mysql 实现数据远程备份

    昨晚吃饭的时候突然觉得我们这个UWP应该添个数据备份的功能,不然换手机,换电脑之后数据库就全没了... 一开始是想用微软提供的AZURE的,没想到这玩意又没什么资料而且申请试用的时候还让我交身份证照片 ...