CFileDialog实现多选

// Create dialog to open multiple files.
CFileDialog Filedlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT | OFN_EXPLORER, _T(“TBL文件(.TBL)|.TBL||”));
// .OFN_ALLOWMULTISELECT,允许多选
const int nMaxFiles = 100;
const int nMaxPathBuffer = (nMaxFiles * (MAX_PATH + 1)) + 1;
LPSTR pc = (LPSTR)malloc(nMaxPathBuffer * sizeof(CHAR));//申请空间存放打开的文件名
memset(pc, 0, nMaxPathBuffer * sizeof(CHAR));

if (pc)
{
Filedlg.m_ofn.lpstrFile = pc;//将上面的内存地址复制给CFileDialog对象
Filedlg.m_ofn.nMaxFile = nMaxPathBuffer * sizeof(CHAR);//此最大数,按MSDN解释为fileDlg.m_ofn.lpstrFile指向的缓冲的最大字符数
//这里是关键,Filedlg.m_ofn.nMaxFile的默认空间长度是260,超过260将不显示,这个是造成多选不显示的原因

}
if (IDOK == Filedlg.DoModal())
{
CString FileName;
POSITION pos = Filedlg.GetStartPosition();// .GetStartPosition,对于选择了多个文件的情况得到第一个文件位置。
while (pos != NULL)
{
FileName = Filedlg.GetNextPathName(pos);//返回选定文件文件名// Retrieve file name(s).
}
}

如上面的代码通过一个全局的二维数组,将FileName 逐个复制到二维数组,就能获取所有选中的文件的文件名。

说明:

OFN_ALLOWMULTISELECT,允许多选,必须设置
GetStartPosition

对于选择了多个文件的情况得到第一个文件位置。
POSITION pos = Filedlg.GetStartPosition();// 这里返回的pos是个地址,这个地址里保存的就是选中的文件的文件路径和文件名,路径与文件名之间用‘.’就是0隔开的。
如pos=0x33f104,查看该地址如下图,保存的就是文件路径
如下图选中4个文件
在这里插入图片描述
在这里插入图片描述

GetNextPathName

FileName = Filedlg.GetNextPathName(pos);//返回选定文件文件名
这个函数返回的就是上面pos的地址里的文件路径,并将pos设置到下一个选中的文件路径的地址

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值