我使用GetOpenFilename()
让用户选择一个文件。这是代码:
wchar_t buffer[MAX_PATH] = { 0 };
OPENFILENAMEW open_filename = { sizeof (OPENFILENAMEW) };
open_filename.hwndOwner = handle_;
open_filename.lpstrFilter = L"Video Files\0*.avi;*.mpg;*.wmv;*.asf\0"
L"All Files\0*.*\0";
open_filename.lpstrFile = buffer;
open_filename.nMaxFile = MAX_PATH;
open_filename.lpstrTitle = L"Open media file...";
open_filename.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
::GetOpenFileNameW(&open_filename);
出现文件对话框,但是当我
更换过滤器或
点击“我的电脑”
文件列表变为空。按下
[F5]
并没有帮助,但是如果我切换到父文件夹并返回到原始文件夹(在“过滤器”更改的情况下),则过滤器工作正常,文件显示在列表中。编辑:我的系统是Windows XP(SP3)32位-没什么特别的。它也发生在其他具有相同配置的计算机上。
最佳答案
您可能尚未引起问题的一件事是完全初始化OPENFILENAMEW结构,尤其是lStructSize元素。我以前见过这种情况会造成奇怪的影响。我建议吃些类似的东西
OPENFILENAMEW open_filename = { sizeof (OPENFILENAMEW) };
ZeroMemory(&open_filename, sizeof (OPENFILENAMEW));
open_filename.lStructSize = sizeof (OPENFILENAMEW);