我使用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);

09-25 18:28