MFC 重写“打开文件对话框”的问题

Fungyun 2011-08-29 08:32:04
才接触MFC,有问题请教各位哈。
在vs2010中,按照MFC的程序向导新建了MFC的工程,然后让其程序正常运行起来后,程序里面自带的“打开文件对话框”并不能满足需求,对话框中文件类型它只有“所有文件(*.*)”,而要求要有多种文件类型。请问是重写这个“打开文件对话框”还是重新用CFiledialog实例化一个呢?重写的话在哪里重写哟(编译器自动生成的代码中未能找到相关位置)?
...全文
191 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Fungyun 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bokutake 的回复:]
不需要,CFileDialog有一个m_ofn成员,是个OPENFILENAME结构体。直接修改它的lpstrFilter成员就行了。

lpstrFilter指向一个空字符结束的过滤字符串的一个缓冲。缓冲中的最后一个字串须以两个NULL字符结束,在编程中使用/0/0。

过滤的字符串分为两部分:第一部分为显示部分,即描述文件显示的字符部分;第二部分为过滤样式部分,如果此类型有多种……
[/Quote]
请教你一下,在fileDlg.m_ofn.lpstrFilter = Filter;中,意思是还是需要重新实例化一个fileDlg,然后再修改它的lpstrFilter 成员值吗,因为如果直接这样写的话,编译器会报出fileDlg没有被定义无法识别。如何修改MFC现有生成的“文件打开框”呢?因为像1楼写的那样只是会重新生成一个文件打开框,虽然要求是符合的,但是没有在基于MFC现有生成的“文件打开框”修改的,而是重现新建的一个“文件打开框”。谢谢解答。
q376009325 2011-08-30
  • 打赏
  • 举报
回复
IDR_MAINFRAME中修改第4个和第5个?
辰岡墨竹 2011-08-29
  • 打赏
  • 举报
回复
嗯,需要用_T()把字符串括起来或者在字符串前加一个L。_T("...")或L""。
因为VS2010默认是Unicode。
辰岡墨竹 2011-08-29
  • 打赏
  • 举报
回复
不需要,CFileDialog有一个m_ofn成员,是个OPENFILENAME结构体。直接修改它的lpstrFilter成员就行了。

lpstrFilter指向一个空字符结束的过滤字符串的一个缓冲。缓冲中的最后一个字串须以两个NULL字符结束,在编程中使用/0/0。

过滤的字符串分为两部分:第一部分为显示部分,即描述文件显示的字符部分;第二部分为过滤样式部分,如果此类型有多种样式,可以使用分号“;”隔开。字符串中不含有空格。

系统不改变其编程中设定的过滤次序。如果lpstrFilter为NULL,则对话框不显示过滤内容。

实例:

/* 使用字符串数组来设定过滤器 */

char Filter[] = "Bitmap Files(*.bmp)/0*.bmp/0" /
"JPEG Files(*.jpeg;*jpg)/0*.jpeg;*.jpg/0" /
"All Files(*.*)/0*.*/0/0";

/* 将设定好的过滤赋值给lpstrFilter */

fileDlg.m_ofn.lpstrFilter = Filter;

注:fileDlg为CFileDialog类型,m_ofn是OPENFILENAME结构体类型。
Eleven 2011-08-29
  • 打赏
  • 举报
回复
MSDN上有现成的例子代码

void CMyClass::OnFileOpen()
{
// szFilters is a text string that includes two file name filters:
// "*.my" for "MyType Files" and "*.*' for "All Files."
TCHAR szFilters[]= _T("MyType Files (*.my)|*.my|All Files (*.*)|*.*||");

// Create an Open dialog; the default file name extension is ".my".
CFileDialog fileDlg(TRUE, _T("my"), _T("*.my"),
OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, szFilters);

// Display the file dialog. When user clicks OK, fileDlg.DoModal()
// returns IDOK.
if(fileDlg.DoModal() == IDOK)
{
CString pathName = fileDlg.GetPathName();

// Implement opening and reading file in here.

//Change the window's title to the opened file's title.
CString fileName = fileDlg.GetFileTitle();

SetWindowText(fileName);
}
}

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧