带有颜色和边界的进度条与常用控件

时间:2014-06-15 09:20:34

标签: visual-c++ win32gui common-controls

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

Original

但是,我希望在Windows 7上使用GUI时看起来是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外观的同时将进度条设置为原始外观?

3 个答案:

答案 0 :(得分:3)

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

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

Gradient Bar Control

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

答案 1 :(得分: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"

答案 2 :(得分:0)

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

SendMessage(hwndPBAR, PBM_SETBKCOLOR, 0, 0x00DCDCDC); //grey