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

3
我希望开发一个可以在Windows XP、Vista和7三个版本上运行的应用程序。该应用程序允许用户选择要打开的文件,并允许他们在进行一些操作后保存文件。每个Windows版本都有不同风格的文件打开对话框。虽然XP使用GetOpenFileName结构的OPENFILENAME来实现,但建议我们在Vista和Windows 7中使用“通用文件对话框”。我可以使建议的样式的文件对话框在每个不同的操作系统版本上工作。然而,我想确保我的应用程序在每个版本上打开不同样式的对话框。我不想为不同版本的Windows构建单独的二进制文件。
是否可能在应用程序中内置此逻辑,即根据应用程序正在运行的操作系统访问本机打开文件对话框?
谢谢,
Abhijit
1个回答

1

你需要做类似这样的事情

if (isVista())
{
    //Use IFileDialog
}
else
{
    //Use GetOpenFileName
}

注意:

如果您将自定义对话框,则无法执行此操作;您必须使用旧版本。

尝试延迟加载 DLL:


感谢@Mehrdad,虽然我可以按照你建议的方式让这个逻辑工作,但在链接时它会寻找Windows 7上可用的Shell32.dll。也就是说,如果我按照您建议的方式构建我的代码块,并在使用Visual Studio 2010在Windows 7上构建应用程序,则无法在Windows XP上运行,因为Shell32.dll是不同版本的。因此,遗憾的是,使用这种逻辑,我的应用程序甚至无法启动:( 我之前尝试了您建议的方法,但并不能解决这个问题。 - Abhijit
请查看您项目属性中的 /DelayLoad 标志。 - user541686
非常感谢 @Mehrdad!它对我有用。您能否说明为什么我无法自定义对话框? 我只是想添加一个链接到大多数用户将保存文件的文件夹。如果我尝试编写代码,那会有问题吗?只是让您知道,我已将项目添加到公共位置,并使用Windows 7本机对话框在Windows 7上显示出来。我还没有尝试在Windows XP上进行自定义。 如果您可以阐明您先前关于自定义的评论的含义,请说明。再次感谢,我将把我的问题标记为已答复。 - Abhijit
@Abhijit:很高兴能帮到你!我所说的“自定义”是指,例如,如果您正在使用IFileDialog版本,则无法向对话框添加新按钮。当然,您可以做对话框允许的任何事情,在大多数情况下,您不需要这样的东西。 - user541686
谢谢@Mehrdad!我正在前往的路上。 - Abhijit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接