请问如何在mfc基于对话框中实现打开文件这个功能?

grmoney 2007-09-06 07:32:15
要求:我新建一个button按钮。。然后我点击他就弹出我们平时打开文件的对话框。。上面有目录。。然后我选择文件(要求txt的)。。然后我读取了这个文件并显示在另一个edit框中。。。。。。。请问怎么实现。。新手刚学mfc。望高手指点。。。请详细说明。。不要给我帖一段代码。。。。谢谢
...全文
666 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
grmoney 2007-09-06
  • 打赏
  • 举报
回复
谢谢各位了。。结帖了。。。
lfcai 2007-09-06
  • 打赏
  • 举报
回复
学习下~~~~~~~~~
jhs1982419 2007-09-06
  • 打赏
  • 举报
回复
我是这么做的,你可以借鉴下.


char path[MAX_PATH];; //用来存储路径的字符串
BROWSEINFO bi;//接收用户所选择的文件夹的参数信息
//ZeroMemory(&bi, sizeof(bi));//清空bInfo在内存中的空间,全部置零

bi.hwndOwner = AfxGetApp()->m_pMainWnd->GetSafeHwnd();//得到对话框父窗口的句柄
//CImageRetrievalApp* pApp = (CImageRetrievalApp*) AfxGetApp();//需要进行类型转换
//bi.hwndOwner = pApp->GetMainWnd()->GetSafeHwnd();//GetMainWnd()所得到的就是m_pMainWnd
bi.pidlRoot = NULL;
bi.pszDisplayName = path;
bi.lpszTitle = _T("请选择进行检索的图像库: ");//在对话框中显示字符
bi.ulFlags = BIF_EDITBOX|BIF_RETURNONLYFSDIRS; //增加一个编辑控件,用户可以在里面直接输入路径条目
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;

LPITEMIDLIST pidl; //用来保存返回信息的IDList
pidl = SHBrowseForFolder(&bi) ; //显示一可以使用户选择文件夹的对话框,返回值为LPITEMIDLIST类型

if(pidl != NULL) //用户按了确定按钮
{
pView->m_JiShu = 0;
pView->m_Seek_ListCtrl.DeleteAllItems();//以前检索的所有的图像列表全部清空

// pView->Seekimagepath = "";//清空显示图像
pView->Seekimage.load(" null.jpg");


for (int i=0;i<32;i++)//清空最前面图像的显示
{
pView->SelectImage[i].load(" null.jpg");
}


SHGetPathFromIDList(pidl, path);//把项目标识列表转化成字符串
FilePath = path; //将CHAR类型的字符串转换为CString类型的字符串
FilePath += "\\"; //在路径后好加上文件的名字
}

CHAR szFind[MAX_PATH];
lstrcpy(szFind, FilePath);

lstrcat(szFind, "*.jpg"); // 找所有jpg文件

//hFind = FindFirstFile(szFind, &FileData);
//if (FindFirstFile(szFind, &FileData) == INVALID_HANDLE_VALUE)
if((pView->hFind = FindFirstFile(szFind, &(pView->FileData))) == INVALID_HANDLE_VALUE)
{
pView->MessageBox("该文件夹中没有jpg图像,请重新选择");
return ;
}

bi.iImage = 0;

LPITEMIDLIST pidl; //用来保存返回信息的IDList
pidl = SHBrowseForFolder(&bi) ; //显示一可以使用户选择文件夹的对话框,返回值为LPITEMIDLIST类型
gfxiang 2007-09-06
  • 打赏
  • 举报
回复
假设你已经为edit控件定义了一个CString类型的成员变量m_str关联起来
那button的click消息处理函数里,加入如下代码
CFileDialog dlg(TRUE, ".txt", NULL, 0, "Text Files (*.txt)|*.txt|All Files(*.*)|*.*||");
if (dlg.DoModal() == IDOK)
{
m_str = dlg.GetPathName();
UpdateData(FALSE);
}
jixingzhong 2007-09-06
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=1419

看看这个也许有帮助...
jixingzhong 2007-09-06
  • 打赏
  • 举报
回复
更多信息,例子,查询 MSDN
jixingzhong 2007-09-06
  • 打赏
  • 举报
回复
简单例子:
CFileDialog dlg( FALSE,NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"JPEG(*.JPG,*.JPE),BMP(*.BMP,*.RLE),TIFF(*.TIF)|*.BMP;*.RLE;*.JPG;JPE;*.TIF;*.TIFF|BMP(*.BMP,*.RLE)|*.BMP;*.RLE|JPEG(*.JPG,*.JPE)|*.JPG;JPE|TIFF(*.TIF)|*.TIF;*.TIFF|*.*|", NULL );

保 存 : 【仅仅是参数不一样】
CFileDialog dlg(TRUE,NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"JPEG(*.JPG,*.JPE),BMP(*.BMP,*.RLE),TIFF(*.TIF)|*.BMP;*.RLE;*.JPG;JPE;*.TIF;*.TIFF|BMP(*.BMP,*.RLE)|*.BMP;*.RLE|JPEG(*.JPG,*.JPE)|*.JPG;JPE|TIFF(*.TIF)|*.TIF;*.TIFF|*.*|", NULL );

然后在选择文件后,
CFileDialog->GetFileName() //或者其他成员方法,获得文件名
然后打开这个文件,
然后读取内容,显示即可
jixingzhong 2007-09-06
  • 打赏
  • 举报
回复
CFileDialog

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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