问题标签 [cfiledialog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
168 浏览

c++ - MFC C++ 派生的 CFileDialog 无法判断何时编辑文件名编辑框

我有一个自定义派生的 CFileDialog。我可以检测到列表控件何时更新,并且用户单击了文件,但我找不到任何方法来判断用户何时只输入文件名。这将是理想的,因为根据他们选择的文件,它会调整另一个自定义文本框。因此,如果无法判断用户何时手动输入来更新它,不幸的是它没有那么有用。

0 投票
1 回答
1966 浏览

mfc - MFC CFileDialog 和 lpstrInitialDir

根据OPENFILENAME 结构的文档,使用以下算法选择初始目录:

Windows 7的:

  1. 如果lpstrInitialDir的值与应用程序第一次使用“打开”或“另存为”对话框时传递的值相同,则用户最近选择的路径将用作初始目录。
  2. 否则,如果lpstrFile包含路径,则该路径是初始目录。
  3. 否则,如果lpstrInitialDir不是NULL,它指定初始目录。
  4. 如果lpstrInitialDirNULL并且当前目录包含指定过滤器类型的任何文件,则初始目录为当前目录。
  5. 否则,初始目录为当前用户的个人文件目录。
  6. 否则,初始目录是 Desktop 文件夹。

我正在使用以下代码构建文件对话框:

但是,它总是在 strSourcePath 中打开相同的默认文件夹。有谁知道为什么?它应该只第一次使用这个目录,随后打开的文件应该记住最后一个文件夹(算法中的要点 1.)。我在 Windows 7 上使用 VS2012。

0 投票
0 回答
367 浏览

visual-studio-2015 - CFileDialog 在视觉上与 Visual Studio 文件对话框不同

Visual Studio 2015中,IDE 使用的文件对话框如下所示:

文件对话框

在我的MFC应用程序中,当我使用CFileDialog, 示例时:

我的版本不一样:

MFC 文件对话框

我喜欢 Visual Studio 版本如何将文件类型显示为更广泛的控制。整洁多了。

我该如何实现这种行为?

0 投票
1 回答
417 浏览

mfc - CFileDialog - 防止删除

我有一个从 CFileDialog 派生的文件打开/保存对话框。有没有办法阻止用户在以编程方式使用此对话框浏览时删除文件?目前,他们可以右键单击并进入 Windows 资源管理器上下文菜单,或者只需突出显示一个文件并按 Del 键。谢谢。

0 投票
2 回答
240 浏览

c++ - 此 Microsoft CFileDialog 示例是否会导致潜在的内存冲突

我一直在使用 MFC CFileDialog 类遇到一些随机崩溃,所以我从这个页面查看了他们的示例代码,内容如下;

通过我的阅读,该语句fileName.ReleaseBuffer();使缓冲区变量中指向的内存p无效,因此剩余的代码很容易发生内存冲突。同时,我还假设微软会在发布这些示例之前对其进行检查。我在这里遗漏了一些明显的东西吗?在不再需要缓冲区之后,是否有任何理由在CString这里使用 a 而不是简单的new后跟 a ?delete

0 投票
1 回答
1114 浏览

mfc - 将 CFolderPickerDialog 用于“另存为”(MFC)

我想使用一个CFolderPickerDialog实例来“另存为”。

换句话说,用户将输入一个(新)文件夹的名称,然后我可以创建它。

使用CFileDialog基类,这可以在构造期间通过第一个输入参数完成:

如何为CFolderPickerDialog实例实现相同的功能?

谢谢你。

0 投票
0 回答
269 浏览

windows - CFileDialog根据Windows版本显示不同的内容

我试图在文件选择对话框中仅显示与远程桌面共享的驱动器。以下是我要展示的内容:

但左侧窗格中的驱动器和文件夹列表根据 Windows 操作系统版本而有所不同。屏幕截图的链接在回复评论中。

我们如何在多个 Windows 版本中显示相同的驱动器和文件夹列表?

这是实现:

我所做的是:

  1. 构造 CFiledialog 的一个实例。
  2. 通过 CFiledialog::GetIFileDialogCustomize() 检索 IFileDialogCustomize 的实例。
  3. 从 IFileDialogCustomize 的实例中检索 IFileDialog2 的实例。
  4. 通过 IFileDialog::SetFilter() 将 IShellItemFilter 的实例设置为文件对话框。
  5. 通过 IFileDialog::SetDefaultFolder() 将默认文件夹设置为 PC(我的电脑)文件夹。
  6. 通过 IFileDialog::SetNavigationRoot() 将导航根设置为 PC(我的电脑)文件夹。
  7. 如果当前文件夹不是共享驱动器或其后代文件夹,则通过 IFileDialog::SetFolder() 将文件夹设置为 PC(我的电脑)文件夹。
  8. 显示文件对话框。

我做了 2. 从 IFileDialogCustomize 的实例中检索 IFileDialog2 的实例。这是因为我想通过同一个例程同时支持“打开”和“保存”文件对话框。

重点是 4.. 后面我会展示 IShellItemFilter 的实现。

我做了 5. 因为如果默认文件夹不是共享驱动器或其后代文件夹,则会显示共享驱动器或其后代文件夹以外的文件夹。

我做了 6. 因为我不想在文件对话框中显示最小内容,也不想显示桌面文件夹。

我做了 7. 因为如果当前文件夹不是共享驱动器或其后代文件夹,则会显示共享驱动器或其后代文件夹以外的文件夹。

IShellItemFilter 的实现是:

如果文件的桌面绝对解析为“::{20D04FE0-3AEA-1069-A2D8-08002B30309D}”或以“\tsclient\”开头,CVisibleShellItemFilter::IncludeItem() 返回 S_OK。“::{20D04FE0-3AEA-1069-A2D8-08002B30309D}”表示PC(我的电脑)文件夹,“\tsclient\”是共享驱动器的文件路径前缀。

谢谢,

更新(2017/09/07 11:54 JST) “内容”->“驱动器和文件夹列表”

0 投票
1 回答
304 浏览

mfc - CFileDialog 多种 CSV 文件类型

我给用户一个CFileDialog来保存他们的工作。支持的文件类型之一是 CSV,但在 CSV 中有几个变体(例如,行优先、列优先等)。我知道我可以在对话框中添加控件以允许这样的选择,但鉴于已经有一个输出文件类型选择器,如果可能的话我想使用它。

0 投票
0 回答
123 浏览

windows - CFileDialog中无法显示为虚拟文件夹创建的新文件夹按钮

通过使用 shell 命名空间扩展,我创建了一个虚拟文件夹并在工具栏上添加了一个“新建文件夹”按钮,当我使用 Windows 资源管理器打开它时,我可以看到该按钮: 在此处输入图像描述

“新建文件夹”按钮的相关代码很简单:

“新建文件夹”按钮只是在单击时弹出一个消息框。但是当我CFileDialog用来浏览这个虚拟文件夹时,我在工具栏中找不到任何“新建文件夹”按钮:

在此处输入图像描述

我可以在 CFileDialog 中的“文档”或 C 驱动器下看到所有其他系统文件夹的“新建文件夹”按钮,但是当我在 CFileDialog 中打开虚拟文件夹时,虚拟文件​​夹的“新建文件夹”按钮会消失。如何解决这个问题?

0 投票
1 回答
489 浏览

mfc - CFileDialog 文件名改变?

我已经成功地将 a 子类化CFileDialog并添加了一个带有一些控件的区域,这些控件使用SetTemplate(). 我的控制消息处理程序被正确调用。

根据键入的文件名,我的控件可能需要更新。OnFileNameChange()单击文件列表以及OnTypeChange()更改文件类型组合框时,我会得到。

但是,当简单地输入文件名时,我怎样才能得到通知?

我已经尝试将 a 添加PreTranslateMessage()到这个CFileDialog子类,但它没有被调用任何东西。我知道如何检查pMsg->message == WM_KEYDOWN,但如果我检测到一个,我怎么知道它是在文件输入字段中按下的键?而且由于钥匙还没有得到控制GetEditBoxText(),所以GetFileName()等。将无法工作......

我还尝试将以下内容添加到我的构造函数中:

具有以下功能:

OFNHook()被叫了很多,但uiMsg从来没有被平等过WM_KEYDOWN。所以与以前相同的问题:我如何知道文件字段的密钥,应用密钥后如何获取该文件字段的值等。