mfc 11 应用程序旧式按钮和进度条

Posted

技术标签:

【中文标题】mfc 11 应用程序旧式按钮和进度条【英文标题】:mfc 11 application old style buttons and progress bars 【发布时间】:2013-10-16 07:15:59 【问题描述】:

我刚刚将一个 vs2010 mfc 应用程序更新到 vs2012,我遇到了新的闪亮样式窗口按钮和进度条没有出现的问题,它们显示为 Windows 2000 样式按钮。

我的 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_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' 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

我正在打电话给InitCommonControlsEx,据我所知,我不需要清单文件来显示新样式。有什么想法吗?

【问题讨论】:

您确定清单已创建吗?正如您在代码中看到的那样,您有一个条件编译...通常定义了 _M_IX86 但是... 非常确定。代码#pragma 注释在该行上没有“变灰”,因此定义了 _M_IX86。将项目升级到 vs2012 时,我确实从非 unicode 更改为 unicode。这会在这里发挥作用吗? 我找到了解决办法。在我的项目设置中,平台工具集设置为“Visual Studio 2012 - Windows XP (v110_xp)”。我将其更改为“Visual Studio 2012 (v110)”,但只有在 exe 目录中放入声明 <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity> 的清单文件后,才会为按钮和进度控件加载正确的样式。 【参考方案1】:

我玩游戏迟到了,但对我来说,问题在于一个名为 /ALLOWISOLATION (description here) 的小型链接器设置。

此链接器设置必须设置为Yes,否则甚至不会考虑清单。并且没有清单意味着将加载 v5.82 通用控件DLL 而不是 v6 版本。

如果这适用于您,您可以从调试器模块加载/卸载消息中看到(版本号与条目一起记录)。

奇怪的是,应用程序仍然出现“半主题”。例如。您可以循环浏览 XP 和 Office 主题,但例如按钮将没有任何现代样式。可能是不同的 DLL (uxtheme?)。

图像列表中的图像也会出现锯齿状(即使图标严格为 32bpp,也没有 alpha 通道)。

【讨论】:

以上是关于mfc 11 应用程序旧式按钮和进度条的主要内容,如果未能解决你的问题,请参考以下文章

猎豹MFC--进度条CProgressCtrl 定时器SetTimer

vc6.0里MFC进度条如何使用

mfc编写一个flash播放器slider进度条的程序,在新建线程中,怎么实现进度条的更新

从 .NET C# DLL 更新 MFC 对话框中的进度条

2015.3.11 VS异步控件及进度条结合应用

MFC求一个工具栏插入进度条的方法