1

问题:

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

细节:

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

关闭这些功能会禁用对话框的内置行为,如果用户在“文件名”组合框中键入文件夹名称并按回车键,对话框会更改当前显示的文件夹。

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

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

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

4

2 回答 2

1

我不确定直接的答案,但是如果您有 SPY++ 或任何其他消息侦听程序,请尝试检查在更改普通 OpenFileName 对话框的目录时经过的消息。您可能会在那里找到答案(尽管这是一个艰难的出路)。

不过,其他人可能会立即知道答案;让我们希望他们这样做。

于 2009-01-22T08:28:35.410 回答
0

我能够找到解决方法。

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

使用 spy++ 我可以看到,当按下回车键时,一条 WM_COMMAND 消息将被发送到带有 wParam 参数的公共对话框控件,该参数的高位字为 BN_CLICKED,低位字为 ID_OK。

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

这有点小技巧,但它使我能够从对话框中获得我想要的行为。

于 2009-01-23T00:14:28.043 回答