无论是mfc还是win32 拖拽Progress Bar控件, 运行后都是显示蓝色的进度条, 如下图:
xp风格蓝色
运行起来不好看 , 下面是绿色的, 还有渐变效果.
WIN7风格绿色
最近在更新调试器的PDB符号下载功能,发现x64dbg的符号下载,也是这种绿色渐变效果的进度条.其实这个早就发现了, 一直以为是别人自绘的. 直到我在WIN10 VS2010 MFC 中拽了一个bar控件,才发现
效果和x64dbg的如出一辙. 就猜想肯定是哪里设置的问题, 因为关键词不明确, 导致GG了半天也没有找到相关信息.
直到下载了一个类似颜色的渐变的进度条代码,从代码里也没有发现任何异样, 最后还是在stdafx.h里面发现了异样.
原来是 manifest 知道这些关键词,再一搜,就有一大堆相关内容了. 这里做个纪录.
方法一:
修改方案, 在stdafx.h底部, 添加如下代码即可. (本人觉得这个方法最简单省事.推荐)
[C++] 纯文本查看 复制代码
// TODO: 在此处引用程序需要的其他头文件
//#ifdef _UNICODE
#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
//#endif
方法二:
将下面的文件保存为 odx64.manifest 导入进资源里面, 资源类型随便填写. (本机 win10 vs2010 实测资源类型和ID是可以随便填写的. 网上说的得写固定24还是42). 添加进去后重新编译,即可生效. (如果没生效, 删除 *.sdf 重启IDE尝试.)
[XML] 纯文本查看 复制代码 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="Microsoft.Windows.MyCoolApp"
processorArchitecture="*"
version="5.3.0.0"
type="win32"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
方法三:#to be continued
2022.05.07 发现 edit控件提示信息. Edit_SetCueBannerText 或者 Edit_SetCueBannerText 不生效. 原因也是因为没有启用上面的 Visual Styles ,只要启用就可以正常显示了, 效果如下图:
文本框提示信息
|