2016-01-29 97 views
0

我有一个.NET C#程序引用了一些C++/CLI dll,这些dll可以启动一些传统的MFC表单/对话框。但是,当这些对话框启动时,它们不会启动当前的Windows主题,也就是视觉样式。他们打开为旧的Windows 98风格。将视觉样式应用于从C#.net程序调用的MFC对话框

如果我们通过包含在Application Exe项目的stdafx.h中的pragma comment的原始C++/CLI项目来启动这些对话框,将以可视样式启动。

我已经在引用的Microsoft文章中尝试了几种关于将视觉样式应用于C++项目的建议。然而,他们都没有工作,因为我认为这篇文章的目标是一个纯粹的C++解决方案,而不是一个引用旧的MFC对话框的混合C#解决方案。

tl; dr可以从C#程序启动MFC对话框,但对话框没有可视化样式。

回答

1

“如果您希望应用程序使用可视化样式,则必须添加应用程序清单或编译器指令,指示应使用ComCtl32.dll版本6(如果可用)。”

来源:https://msdn.microsoft.com/en-us/library/windows/desktop/bb773175(v=vs.85).aspx

的应用程序清单应该工作。

+0

嗨丹,感谢回应,但我已经尝试过应用程序清单。正如我在原文中所提到的,我一直在这个链接,并尝试了所有建议。当我添加应用程序清单时,我的C#应用​​程序不能编译。它抱怨此错误: 错误找不到文件 'Microsoft.Windows.Common - 控制,版本= 6.0.0.0,文化= *,公钥= 6595b64144ccf1df,ProcessorArchitecture用于= *,类型= win32的' 的我发现唯一的解决方案就是将其注释掉,这打破了将其添加到应用程序清单的目的。 –

+0

因此,将ComCtl32.dll版本6或更高版本添加到您的项目引用。 (您运行的是哪个版本的Visual Studio,在哪个版本的Windows上运行?) 至少,您应该能够将独立的XML清单文件放在可执行文件的旁边,与可执行文件的名称相同,并带有“ .manifest“添加到最后。 –

相关问题