问题标签 [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.
c++ - MFC C++ 派生的 CFileDialog 无法判断何时编辑文件名编辑框
我有一个自定义派生的 CFileDialog。我可以检测到列表控件何时更新,并且用户单击了文件,但我找不到任何方法来判断用户何时只输入文件名。这将是理想的,因为根据他们选择的文件,它会调整另一个自定义文本框。因此,如果无法判断用户何时手动输入来更新它,不幸的是它没有那么有用。
mfc - MFC CFileDialog 和 lpstrInitialDir
根据OPENFILENAME 结构的文档,使用以下算法选择初始目录:
Windows 7的:
- 如果lpstrInitialDir的值与应用程序第一次使用“打开”或“另存为”对话框时传递的值相同,则用户最近选择的路径将用作初始目录。
- 否则,如果lpstrFile包含路径,则该路径是初始目录。
- 否则,如果lpstrInitialDir不是NULL,它指定初始目录。
- 如果lpstrInitialDir为NULL并且当前目录包含指定过滤器类型的任何文件,则初始目录为当前目录。
- 否则,初始目录为当前用户的个人文件目录。
- 否则,初始目录是 Desktop 文件夹。
我正在使用以下代码构建文件对话框:
但是,它总是在 strSourcePath 中打开相同的默认文件夹。有谁知道为什么?它应该只第一次使用这个目录,随后打开的文件应该记住最后一个文件夹(算法中的要点 1.)。我在 Windows 7 上使用 VS2012。
mfc - CFileDialog - 防止删除
我有一个从 CFileDialog 派生的文件打开/保存对话框。有没有办法阻止用户在以编程方式使用此对话框浏览时删除文件?目前,他们可以右键单击并进入 Windows 资源管理器上下文菜单,或者只需突出显示一个文件并按 Del 键。谢谢。
mfc - 将 CFolderPickerDialog 用于“另存为”(MFC)
我想使用一个CFolderPickerDialog
实例来“另存为”。
换句话说,用户将输入一个(新)文件夹的名称,然后我可以创建它。
使用CFileDialog
基类,这可以在构造期间通过第一个输入参数完成:
如何为CFolderPickerDialog
实例实现相同的功能?
谢谢你。
windows - CFileDialog根据Windows版本显示不同的内容
我试图在文件选择对话框中仅显示与远程桌面共享的驱动器。以下是我要展示的内容:
但左侧窗格中的驱动器和文件夹列表根据 Windows 操作系统版本而有所不同。屏幕截图的链接在回复评论中。
我们如何在多个 Windows 版本中显示相同的驱动器和文件夹列表?
这是实现:
我所做的是:
- 构造 CFiledialog 的一个实例。
- 通过 CFiledialog::GetIFileDialogCustomize() 检索 IFileDialogCustomize 的实例。
- 从 IFileDialogCustomize 的实例中检索 IFileDialog2 的实例。
- 通过 IFileDialog::SetFilter() 将 IShellItemFilter 的实例设置为文件对话框。
- 通过 IFileDialog::SetDefaultFolder() 将默认文件夹设置为 PC(我的电脑)文件夹。
- 通过 IFileDialog::SetNavigationRoot() 将导航根设置为 PC(我的电脑)文件夹。
- 如果当前文件夹不是共享驱动器或其后代文件夹,则通过 IFileDialog::SetFolder() 将文件夹设置为 PC(我的电脑)文件夹。
- 显示文件对话框。
我做了 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) “内容”->“驱动器和文件夹列表”
mfc - CFileDialog 多种 CSV 文件类型
我给用户一个CFileDialog
来保存他们的工作。支持的文件类型之一是 CSV,但在 CSV 中有几个变体(例如,行优先、列优先等)。我知道我可以在对话框中添加控件以允许这样的选择,但鉴于已经有一个输出文件类型选择器,如果可能的话我想使用它。
mfc - CFileDialog 文件名改变?
我已经成功地将 a 子类化CFileDialog
并添加了一个带有一些控件的区域,这些控件使用SetTemplate()
. 我的控制消息处理程序被正确调用。
根据键入的文件名,我的控件可能需要更新。OnFileNameChange()
单击文件列表以及OnTypeChange()
更改文件类型组合框时,我会得到。
但是,当简单地输入文件名时,我怎样才能得到通知?
我已经尝试将 a 添加PreTranslateMessage()
到这个CFileDialog
子类,但它没有被调用任何东西。我知道如何检查pMsg->message == WM_KEYDOWN
,但如果我检测到一个,我怎么知道它是在文件输入字段中按下的键?而且由于钥匙还没有得到控制GetEditBoxText()
,所以GetFileName()
等。将无法工作......
我还尝试将以下内容添加到我的构造函数中:
具有以下功能:
OFNHook()
被叫了很多,但uiMsg
从来没有被平等过WM_KEYDOWN
。所以与以前相同的问题:我如何知道文件字段的密钥,应用密钥后如何获取该文件字段的值等。