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

标签 visual-c++ win32gui common-controls

我喜欢我喜欢的 GUI 中的彩色进度条:

Original

但是,我希望 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='*'\"")

但这导致了我不喜欢的单色(绿色)动画发光工具栏:

glowing

所以我通过输入删除了样式:

  SetWindowTheme(hProgress, L" ", L" ");

结果不错:

Borderless

但是请注意,尽管我依赖于相同的资源文件,但进度条周围没有边框。 如何将进度条设置为原始外观,同时保留窗口其余部分的 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 的颜色值像素使它们成为所需的颜色。

关于visual-c++ - 带颜色的进度条和带有通用控件的边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24228197/

相关文章:

python win32gui 寻找子窗口

c++ - 在图片控件中使用 SS_REALSIZECONTROL 时出现语法错误

windows - 如何获得完整的 unicode 支持,包括 VCL 控件中的中文字符或 XP 上的 Windows 通用控件,就像在 Win7 中一样

c++ - 在 Win32 中将图像放置在 CEdit 控件中

c++ - VC++ 中的 Windows 7 按钮样式

c++ - GetThemeFont 函数不工作

c++ - Visual C++ 项目属性 @ $ % 宏

c++ - 使用单例创建对话框

c++ - 如何在 std::map 或 std::unordered_map 之间切换作为类中的容器?

c - 有没有办法用 MSVC 编译器输出定义宏的有效列表?