Windows 7 Windows XP、Windows Vista和Windows 7上的不同文件打开对话框

Windows 7 Windows XP、Windows Vista和Windows 7上的不同文件打开对话框,windows-7,windows-xp,fileopendialog,Windows 7,Windows Xp,Fileopendialog,我想开发一个适用于所有三个版本的Windows XP、Vista和7的应用程序。该应用程序允许人们选择要打开的文件,并允许他们在某些操作后保存文件。三个版本的Windows都有不同样式的文件打开对话框。虽然XP使用带有OPENFILENAME结构的GetOpenFileName,但建议我们在Vista和Windows7中使用“通用文件对话框”。我可以使用建议样式的文件对话框来为每个不同版本的操作系统工作。但是,我希望确保我的应用程序在每个版本上打开不同样式的对话框。我不想为不同版本的Window

我想开发一个适用于所有三个版本的Windows XP、Vista和7的应用程序。该应用程序允许人们选择要打开的文件,并允许他们在某些操作后保存文件。三个版本的Windows都有不同样式的文件打开对话框。虽然XP使用带有OPENFILENAME结构的GetOpenFileName,但建议我们在Vista和Windows7中使用“通用文件对话框”。我可以使用建议样式的文件对话框来为每个不同版本的操作系统工作。但是,我希望确保我的应用程序在每个版本上打开不同样式的对话框。我不想为不同版本的Windows构建单独的二进制文件

是否可以在应用程序中内置此逻辑,即允许它访问基于运行应用程序的操作系统的本机打开文件对话框

谢谢


Abhijit

您必须执行以下操作

if (isVista())
{
    //Use IFileDialog
}
else
{
    //Use GetOpenFileName
}
注: 如果要自定义对话框,则不能执行此操作;你必须使用旧版本

尝试延迟加载DLL:


谢谢@Mehrdad,虽然我可以按照您建议的方式使用此逻辑,但链接时会查找Windows 7上可用的Shell32.dll,也就是说,如果我有您建议的代码块,并使用Visual Studio 2010在Windows 7上构建我的应用程序,它不会在Windows XP上运行,因为Shell32.dll是不同的版本。因此,按照这种逻辑,我的应用程序不幸甚至无法启动:(我尝试了您之前的建议,但它无法解决此问题。请查看您的项目属性中的标志。非常感谢@Mehrdad!它对我起到了作用。您是否可以澄清我无法自定义对话框的原因。我只是尝试添加指向大多数用户将保存文件的文件夹的链接。如果我尝试对其进行编码,是否会有问题。只是想让您知道,我确实将项目添加到了公共位置,并使用Windows 7本机对话框将其显示在Windows 7上。我没有尝试在Windows XP上对其进行自定义。请澄清您之前对自定义的评论是什么意思。再次感谢,我会将我的问题标记为已回答。@Abhijit:很高兴它有帮助!通过“自定义”我的意思是,例如,如果你使用了<代码> iFielDala[/Cord]版本,你不能添加一个新的按钮。当然,你可以做任何对话框让你,在大多数情况下,你不需要这样的东西。谢谢Mehrdad!我在路上。