2009-01-22 107 views
1

问:GetOpenFileName更改目录

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

详情:

我有一个自定义打开文件对话框(使用自定义模板添加额外的控件)也已全部确认,现有的检查和创建测试关闭(通过OPENFILENAME标志) 。

如果用户在“文件名”组合框中输入文件夹名称并点击回车键,则禁用对话框的内置行为,使其更改当前显示的文件夹。

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

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

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

回答

0

我能弄清楚工作情况。

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

使用间谍++我能看到,进入当打WM_COMMAND消息将会被发送到公共对话框控件与wParam参数,其喜序位字是BN_CLICKED,其低位字是ID_OK。

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

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

1

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

其他人也许可能知道答案,让我们希望他们这样做。