English 中文(简体)
GetOpenFileName()在更换过滤器时不会复读。
原标题:
  • 时间:2009-05-28 17:35:36
  •  标签:

I use GetOpenFilename(),让用户选择一个档案。 该守则是:

  wchar_t buffer[MAX_PATH] = { 0 };

  OPENFILENAMEW open_filename = { sizeof (OPENFILENAMEW) };

  open_filename.hwndOwner   = handle_;
  open_filename.lpstrFilter = L"Video Files*.avi;*.mpg;*.wmv;*.asf"
                              L"All Files*.*";
  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);

案卷辩证,但当我发现时。

  • change the Filter or
  • click on "My Computer"

档案清单空洞。 Pressing [F5] 但是,如果我转嫁给父母的双倍,回到原来的夹(如果是变换),则过滤工程的罚款和档案在清单中显示。

http://www.un.org。 我的系统是Windows XP(SP3) 32-bit——没有特殊用途。 这还发生在其他机器上——也属于同一个conf。

最佳回答

奥凯,我已经指出这个问题,或者至少我有一个为我工作的解决办法。

此前,我曾发出以下呼吁,即启动COM...。

::CoInitializeEx(NULL, COINIT_MULTITHREADED);

确实,将这一点改为......

::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

......为我解决问题! 现在,档案室正在再次过滤。

我搜索了这个网络,似乎只有极少数人面临同样的问题,但没有人发表上述解决办法。 谁能核实我的调查结果?

问题回答

你们已经做过可能引发问题的一件事,就是全面启动欧佩纳基金会的结构,特别是建筑单元。 我看到,这造成了奇怪的影响。 我建议有这样的东西。

  OPENFILENAMEW open_filename = { sizeof (OPENFILENAMEW) };
  ZeroMemory(&open_filename, sizeof (OPENFILENAMEW));
  open_filename.lStructSize = sizeof (OPENFILENAMEW);

Thank you, beef2k. It works. But my problem has a little difference. Everything worked fine until I added the SHBrowseForFolder call. I had got the same effect since that moment. But adding CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); solved the problem.





相关问题
热门标签