GetOpenFileName更改目录

时间:2009-01-22 08:15:33

标签: windows dialog openfiledialog

问题:

有谁知道如何更改已经运行的打开文件对话框的当前目录?

详细信息:

我有一个自定义的打开文件对话框(使用自定义模板添加额外的控件),它还关闭了所有验证,现有检查和创建测试(通过OpenFileName标志)。

关闭这些内容将禁用对话框的内置行为,如果用户在“文件名”组合框中键入文件夹名称并按Enter键,则会导致其更改当前显示的文件夹。

我想补充一下这种行为。我可以通过钩子程序检测到这种情况。我已经隐藏了OK按钮,关闭了它的加速器,并在控件上放置了我自己的“选择”按钮。这意味着我收到CDN_FILEOK消息的唯一时间是用户在输入后点击文本框中的输入。

但是,我不能弄清楚如何以编程方式告诉对话框更改当前目录。

我想我可以通过向窗口中的SHELLDLL_DefView控件发送某种消息来完成此操作,但我无法在其上找到任何文档。

2 个答案:

答案 0 :(得分:1)

我不确定直接答案,但如果您有SPY ++或任何其他消息侦听程序,请尝试检查更改正常OpenFileName对话框目录时所发生的消息。你可能会在那里找到答案(虽然这是困难的出路)。

其他人可能会知道答案的副作用;我们希望他们这样做。

答案 1 :(得分:0)

我能够找到解决方法。

事实证明,当关闭验证时,键入以“\”结尾的目录名仍将更改正在显示的文件夹,但键入不以“\”结尾的目录名称将不会

使用spy ++我能够看到当命中输入时,WM_COMMAND消息将被发送到具有wParam参数的公共对话框控件,该参数的高位字是BN_CLICKED,其低位字是ID_OK。

如果我将公共对话框子类化,我可以截取消息,更改文件名组合框中的文本,将消息转发到原始子类过程,然后再更改文本。

这有点破解,但它使我能够从对话中获得我想要的行为。