【发布时间】:2015-12-16 18:08:53
【问题描述】:
根据OPENFILENAME structure的文档,使用以下算法选择初始目录:
Windows 7:
- 如果 lpstrInitialDir 的值与应用程序第一次使用 打开 或 另存为 对话框时传递的值相同,则路径最用户最近选择的用作初始目录。
- 否则,如果 lpstrFile 包含路径,则该路径是初始目录。
- 否则,如果lpstrInitialDir不为NULL,则指定初始目录。
- 如果 lpstrInitialDir 为 NULL 且当前目录包含指定过滤器类型的任何文件,则初始目录为当前目录。
- 否则初始目录为当前用户的个人文件目录。
- 否则初始目录为桌面文件夹。
我正在使用以下代码来构建文件对话框:
CFileDialog dlgFile(bOpenFileDialog);
dlgFile.m_ofn.lpstrInitialDir = strSourcePath;
dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH);
但是,它总是在 strSourcePath 中打开相同的默认文件夹。有谁知道为什么?它应该只第一次使用这个目录,随后打开的文件应该记住最后一个文件夹(算法中的要点 1.)。我在 Windows 7 上使用 VS2012。
【问题讨论】:
-
文档似乎有冲突。虽然OPENFILENAME 包含问题中复制的算法,但CFileDialog::m_ofn 建议使用Windows Vista 样式对话框时不支持
lpstrInitialDir。
标签: mfc cfiledialog