【发布时间】:2017-04-08 18:46:04
【问题描述】:
我已从 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 文件。
【问题讨论】:
-
您的清单文件似乎有问题。
-
请注意,如果您要使用
#pragma comment嵌入清单,则必须从项目中删除清单文件 -
也请在
CWinApp::InitInstance()中发布您拥有的内容以初始化常用控件。 -
@AndrewKomiagin,这个项目没有清单文件。我已经在计算机上搜索了 .manifest 并且与该项目没有任何关系(主项目有一个,但它不包含有关样式的任何详细信息(它用于我们有 ActiveX 控件并希望覆盖注册表调用)。请注意,MFC 是我们 C++ 项目的一部分,没有实际的 MFC 项目,只有 MFC 代码,因此没有 CWinApp()::InitInstance()
标签: visual-studio-2010 visual-studio-2013 mfc