问题:
有人知道如何更改已在运行的打开文件对话框的当前目录吗?
详细信息:
我有一个定制的打开文件对话框(使用自定义模板添加额外的控件),该对话框还关闭了所有验证、现有检查和创建测试(通过OpenFileName标志)。
关闭这些功能将禁用对话框的内置行为,如果用户将文件夹名称键入“文件名”组合框并单击enter键,对话框将导致该对话框更改当前显示的文件夹。
我想把这种行为加回去。我可以通过钩子程序检测到什么时候发生这种情况。我隐藏了OK按钮,关闭了它的加速器,并将自己的"select“按钮放在控件上。这意味着我唯一一次收到CDN_FILEOK消息是当用户在输入文本框后点击enter。
但是,我想不出如何以编程方式告诉对话框更改当前目录。
我在想,我可以通过向窗口中的SHELLDLL_DefView控件发送某种消息来完成这个任务,但是我还没有找到任何关于它的文档。
发布于 2009-01-23 00:14:28
我在周围找到了一份工作。
结果是,当关闭验证时,输入以"\“结尾的目录名仍然会更改所显示的文件夹,但键入不以"\”结尾的目录名则不会。
使用spy++,我能够看到,当enter被击中时,WM_COMMAND消息将被发送到带有wParam参数的公共对话框控件,该参数的高阶单词是BN_CLICKED,低阶单词是ID_OK。
如果子类为公共对话框,则可以拦截消息,更改文件名组合框中的文本,将消息转发到原始子类过程,然后再更改文本。
这有点麻烦,但它使我能够从对话框中得到我想要的行为。
发布于 2009-01-22 08:28:35
我不确定直接的答案,但是如果您有SPY++或任何其他消息窥探程序,请尝试检查当您更改普通OpenFileName对话框的目录时经过的消息。你可能会在那里找到答案(尽管这是很难的出路)。
不过,其他人可能会马上就知道答案,但愿他们知道。
https://stackoverflow.com/questions/468398
复制相似问题