我喜欢我喜欢的 GUI 中的彩色进度条:
但是,我希望 GUI 在 Windows 7 上看起来是 Windows 7 风格,所以我添加了这个 pragma
#pragma comment( linker, "/manifestdependency:\"type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' \
language='*'\"")
但这导致了我不喜欢的单色(绿色)动画发光工具栏:
所以我通过输入删除了样式:
SetWindowTheme(hProgress, L" ", L" ");
结果不错:
但是请注意,尽管我依赖于相同的资源文件,但进度条周围没有边框。 如何将进度条设置为原始外观,同时保留窗口其余部分的 Windows 7 外观?
最佳答案
启用视觉样式后,标准 Win32 ProgressBar 不支持自定义颜色,而是从当前主题获取颜色。这就是为什么您的 ProgressBars 都变成绿色的原因。但是,您可以使用 PBM_SETSTATE
将 ProgressBar 的状态设置为 PBST_NORMAL
的消息(绿色),PBST_ERROR
(红色),或 PBST_PAUSED
(黄色)。
除此之外,要显示带有自定义颜色的主题 ProgressBar,您必须使用所有者绘制自定义控件 DrawThemeBackground()
直接绘制various components的 "PROGRESS"
根据需要上课。可以通过设置 iStateId
来绘制标准的红色、绿色、青色和黄色。参数 PBFS_ERROR
, PBFS_NORMAL
, PBFS_PARTIAL
, 或 PBFS_PAUSED
(分别)绘制 PP_FILL
时部分(显示当前进度的彩色条)。但是,如果您需要任何其他颜色,它会变得有点棘手。以下文章展示了使用渐变颜色混合绘制标准主题进度条的示例:
演示的技术首先使用 PBFS_NORMAL
绘制标准 ProgressBar。 (绿色)状态,然后使用 HSL 饱和度和强度变换来改变 PP_FILL
的颜色值像素使它们成为所需的颜色。
关于visual-c++ - 带颜色的进度条和带有通用控件的边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24228197/