visual-c++ - 带颜色的进度条和带有通用控件的边框

我喜欢我喜欢的 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 时部分(显示当前进度的彩色条)。但是,如果您需要任何其他颜色,它会变得有点棘手。以下文章展示了使用渐变颜色混合绘制标准主题进度条的示例:

Gradient Bar Control

演示的技术首先使用 PBFS_NORMAL 绘制标准 ProgressBar。 (绿色)状态,然后使用 HSL 饱和度和强度变换来改变 PP_FILL 的颜色值像素使它们成为所需的颜色。

https://stackoverflow.com/questions/24228197/

相关文章:

r - 为什么 R 的 ccf 说 "Autocorrelations of series ' X'

ports - 代理服务器的推荐端口

hibernate - 在 JPA 中同时映射键和对象

python - Tkinter Windows 按键事件

c# - C# 对象中 [key] 的用途是什么?

r - 按第一列对矩阵列表进行排序

ruby-on-rails - 不知道如何构建任务 - cucumber

json - 在 JSON-RPC 连接上读取多个 JSON 对象

wordpress - 如何使用非拉丁 url 在 iis 上为 wordpress 编写 web.

sorting - thenComparing 与 thenComparingInt 的性能 - 使