在OpenFileDialog中获取选定的文件/文件夹

时间:2014-08-11 08:07:41

标签: c# openfiledialog wndproc

我需要从System.Win32命名空间(现代' Vista'对话框)自定义OpenFileDialog。我找到了很好的woorking文章如何使用System.Windows.Forms命名空间中的旧样式对话框。设置NativeWindow并重载WndProc方法。当我使用Win32命名空间中的文件对话框执行此操作时,一切正常(意味着我收到所有通知)期望在选择文件时设置WM_NOTIFY消息。

我使用EnumChildWindows(...)发现了文件对话框的任何子控件,并为WndProc / WM_NOTIFY注册但没有CDN_TYPECHANGE通知

有没有一种方法可以从System.Win32.OpenFileDialog类获取有关当前所选文件/文件夹的通知?

非常感谢任何帮助,

升序

1 个答案:

答案 0 :(得分:0)

自定义新的Vista文件对话框的处理方式与旧式XP文件对话框完全不同。您不再处理资源模板,窗口程序等。

而是在对话框界面上使用QueryInterface来获取IFileDialogCustomize界面。然后使用其方法自定义对话框。网上有很多例子。例如,这是来自MSDN的Common Item Dialog, Customizing the Dialog。您将找到的大多数示例都是针对C ++的,但由于API基于COM,因此很容易映射到C#。

现在,根据您的问题判断,与您感兴趣的通知并不是定制。在这种情况下,您需要查看IFileDialogEvents界面。您可以为该对话框提供该接口的实现,然后接收各种事件的通知,包括文件夹和选择更改。通过致电IFileDialog::Advise订阅对话框的活动。

您可能会发现API CodePack中的界面翻译非常有用。