如何创建具有多文件选择可能性的普通文件打开对话框?我正在使用 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 及更高版本中,您可以使用 common item dialog而不是 GetOpenFileName
。新的公共(public)项对话框的众多改进之一是调用者不分配缓冲区。因此,可以选择的文件数量没有限制。
您的代码的一个相当严重的问题是您没有分配缓冲区。您写道:
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);
关于c++ - 如何使用 winapi 创建一个对话框来选择多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26142703/