c++ - 更改过滤器时 GetOpenFileName() 不刷新

标签 c++ c winapi dialog

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

关于c++ - 更改过滤器时 GetOpenFileName() 不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/922204/

相关文章:

C "Error: Expecter expression before ' 列表'"

C++ 套接字 - 我只能发送字符吗?

C++ 堆栈与堆和指针

c++ - 在 C++ 中使用换行符打破循环

c - 将 Double 转换为 Char 时的舍入错误

c++ - win32 内容已更改但不显示更新,除非移动窗口

python - 鼠标单击命令在某些 GUI 上不起作用

c++ - 'using' 关键字与多个重载

c++ - 链表迭代器实现 C++

c - C 中的线程 - 关于多线程的教科书答案