繁体   English   中英

从VS2010升级到VS2013失去了视觉风格

[英]Upgrading from VS2010 to VS2013 has lost the visual styles

我已从Visual Studio 2010升级到Visual Studio 2013。

我还为Visual Studio 2013安装了多字节MFC库

自升级以来,视觉样式不再适用于在MFC对话框中创建的控件。

我将指出,Visual Studio会半正确地预览(渲染)(错误的背景,但通常是正确的控件),只有在运行时(调试或发布等)才会发生这种奇怪的变化。

我在当前解决方案中添加了一个新的MFC应用程序。 当我调试此MFC应用程序时,它将使用视觉样式进行渲染。

编辑

我遵循了如何在没有清单的情况下启用视觉样式中的建议

这意味着,在MFC项目中,我有一个stdafx.h 由于我使用的版本比VS2005晚(并且没有清单文件),因此我将以下内容添加到stdafx.h

#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif

编辑

如果有关系,该项目的默认字符集将设置为“ Use Multi-Byte Character Set

编辑

该项目没有清单文件。 它是嵌入式的。

编辑

比较VS2010版本和VS2013版本的.exe文件(使用记事本打开)时,显示相同的清单文件,但有1个例外

VS2010

<ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings" xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</ms_windowsSettings:dpiAware>

VS2013

<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>

但是,我看不到DPI将如何影响这一点。

编辑

我刚刚意识到此解决方案中还有另一个项目也使用MFC对话框。 同样的问题仍然存在。

更新

我已经确保新MFC项目和C ++项目之间的项目设置相同(区别是MFC导出到Application,而我将项目导出到.dll)

我已确保项目中的stafx.h与新的MFC项目相同(不同之处在于,我的C ++项目需要ActiveX Control包括)

请注意,清单是嵌入式的,并且是通过属性窗格创建的。 没有手动配置的xml文件。

很难猜测项目转换中可能出了什么问题。 或就此而言,您如何在VS2010中确保为程序生成了正确的清单。 确实需要解决您的问题中的细节。

有点麻烦了,这对于确保EXE文件有一个良好的清单,这些天非常关键。 不仅对启用视觉样式很重要,它还声明该程序与UAC兼容。 该清单应始终作为资源嵌入,而不是作为单独的文件部署。 由链接器完成。 您添加的#pragmas仅在链接器嵌入清单时才有效。

您可以使用文件>打开>文件>从构建目录中选择EXE来仔细检查此清单是否已正确嵌入。 尝试使用c:\\​​ windows \\ notepad.exe进行比较。 您应该看到RT_MANIFEST节点,将其打开以查看资源ID#1。 您可以双击它以查看内容,但这会导致难以阅读的十六进制转储。 替代方法是右键单击它>导出>保存到扩展名为.txt的文件,然后在文本编辑器中将其打开。

您将需要检查项目的构建选项,以确保清单生成已启用。 最好的方法是再次启动VS,并使用向导创建一个新的MFC项目,使您可以将已知良好的设置与项目的设置进行比较。 要比较的文件位于链接器>清单文件和清单工具>所有设置中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM