以前做项目的时候,也使用过CFileDialog类,但只是一些简单的利用。也没有发现他有什么问题;在这次项目中,我们本打算在程序运行路径创建一个数据库,可是每次都创建到选择的文件的路径,于是感觉到很郁闷,仔细想了一下,确定就是这个类出的问题。在百度上查询了一下,才知道是由于自己没有用好参数,所以此产生的问题;
CFileDialog 构造函数:
CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );
一般使用的时候,我们只是改变了第一个参数,当用到过滤的时候,就需要用第五个参数了。
咱我用的时候,我把中间三个参数设置为NULL,感觉没什么用。不过我这次出问题,就是出在疏忽了第四个参数,当时我也看到了第四个参数需要传递一些值,当时感觉能运行,没有什么问题,就不再理他了,所以才发生了这次悲剧,造成了这个小博客的诞生。查看一个第四个参数的列表:
#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
根据需要设置第四个参数.....