如何创建具有多文件选择可能性的普通文件打开对话框?我正在使用GetOpenFileName()函数打开一个对话框。
如果将设置OFN_ALLOWMULTISELECT
为Flags
,它将出现以下对话框:
由于多种原因,这不是我想要的。
我希望它看起来像这样:
是否有任何简单/简便的解决方案,还是我必须自己重新创建整个对话框?
编辑:这是我打开对话框的代码:
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd;
ofn.lpstrFile = "selectfile";
ofn.nMaxFile = 260;
ofn.lpstrFilter = "t1\0test1\0t2\0test2\0";
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.nFilterIndex = 1;
ofn.Flags = OFN_ALLOWMULTISELECT | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
ofn.lpstrTitle = TEXT("title");
GetOpenFileName(&ofn);
您必须同时包含OFN_EXPLORER
标志和OFN_ALLOWMULTISELECT
标志。
使用的缺点GetOpenFileName
是必须为所选文件分配缓冲区。因此,这意味着您需要在显示对话框之前决定缓冲区的大小。这具有限制可以选择的文件数量的作用。
在Vista及更高版本上,您可以使用通用项目对话框代替GetOpenFileName
。新的公共项目对话框的许多改进之一是,调用方不分配缓冲区。因此,可以选择的文件数量没有限制。
您的代码的一个相当严重的问题是您没有分配缓冲区。你写了:
ofn.lpstrFile = "selectfile";
它提供了只读字符串文字而不是可变缓冲区。您需要先解决该问题,然后再继续。此代码显示了启动文件对话框并支持多选的最低要求:
OPENFILENAME ofn = { sizeof ofn };
wchar_t file[1024];
file[0] = '\0';
ofn.lpstrFile = file;
ofn.nMaxFile = 1024;
ofn.Flags = OFN_ALLOWMULTISELECT | OFN_EXPLORER;
GetOpenFileName(&ofn);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句