我已从Visual Studio 2010升级到Visual Studio 2013。
我还安装了Multibyte MFC Library for Visual Studio 2013。
自升级以来,视觉样式不再适用于在MFC对话框中创建的控件。
我将指出Visual Studio半正确地预览(渲染)它(错误的背景但通常是正确的控件),它只在运行时(调试或发布等)才会发生这种奇怪的变化。
我在当前的解决方案中添加了一个新的MFC应用程序。当我调试这个MFC应用程序时,它使用视觉样式呈现。
修改
我已按照How to enable visual styles without a manifest
中的建议进行操作这意味着,在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导出到应用程序,我将项目导出到.dll)
我确保我的项目中的stafx.h与新的MFC项目相同(不同之处在于我的C ++项目需要ActiveX控件包含)
请注意,清单是嵌入式的,是通过属性窗格创建的。没有手动配置的xml文件。
答案 0 :(得分:2)
很难猜出项目转换中可能出现的问题。或者就此而言,您在VS2010中如何确保为程序生成了正确的清单。您真的需要解决您问题中的详细信息。
对此有点了解,这些天来确保EXE文件具有良好的清单非常重要。不仅重要的是启用Visual Styles,它还声明该程序与UAC兼容。该清单应始终作为资源嵌入,而不是作为单独的文件部署。由链接器完成。您添加的#pragmas只能在链接器嵌入清单时才能工作。
您可以使用File&gt;仔细检查此清单是否已正确嵌入。打开&gt;文件&gt;从构建目录中选择EXE。尝试使用c:\ windows \ notepad.exe进行比较。您应该看到RT_MANIFEST节点,打开它以查看资源ID#1。您可以双击它以查看内容,但这会产生难以阅读的十六进制转储。替代方法是右键单击它&gt;出口&gt;保存到扩展名为.txt的文件,然后在文本编辑器中打开它。
您需要检查项目的构建选项以确保启用了清单生成。最好再次启动VS并使用向导创建一个新的MFC项目,这样您就可以将已知良好的设置与项目的设置进行比较。您想要比较的那些位于Linker&gt;清单文件和清单工具&gt;所有设置。