2

我的 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 对窗口其余部分的外观?

4

3 回答 3

3

启用视觉样式后,标准 Win32 ProgressBar 不支持自定义颜色,而是从当前主题获取颜色。这就是为什么你的 ProgressBars 都变成绿色的原因。但是,您可以使用该PBM_SETSTATE消息将 ProgressBar 的状态设置为PBST_NORMAL(绿色)、PBST_ERROR(红色)或PBST_PAUSED(黄色)。

除此之外,要显示带有自定义颜色的主题 ProgressBar,您必须直接使用所有者绘制自定义控件DrawThemeBackground(),并根据需要绘制类的各种组件"PROGRESS"。在绘制部分(显示当前进度的彩色条)时,可以通过将iStateId参数设置为PBFS_ERRORPBFS_NORMALPBFS_PARTIALPBFS_PAUSED(分别)绘制标准的红色、绿色、青色和黄色。PP_FILL但是,如果您需要任何其他颜色,它会变得有点棘手。以下文章显示了一个使用渐变颜色混合绘制标准主题 ProgressBar 的示例:

渐变条控制

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

于 2014-06-19T23:21:11.250 回答
0

我遇到了完全相同的问题,但没有设法启用边界。但是,通过更改条形图的背景,它看起来还可以:

SendMessage(hwndPBAR, PBM_SETBKCOLOR, 0, 0x00DCDCDC); //grey
于 2021-08-05T15:33:58.550 回答
0

通过编写此清单更改进度条的样式:

 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
manifestVersion="1.0">
 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  <security>
       <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" 
   uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="Win32" 
    name="Microsoft.Windows.Common-Controls" 
    version="6.0.0.0"
                    processorArchitecture="*" 
     publicKeyToken="6595b64144ccf1df" language="*"/>
     </dependentAssembly>
    </dependency>

这个资源:

1 24"manifestname.manifest"
于 2020-06-05T16:19:23.390 回答