如何更改进度条颜色?

Siv*_*iva 5 c++ mfc visual-c++

我在更改进度条的颜色时遇到问题.最初我为该进度控件创建了一个实例OnInitDialog().我正在尝试更改进度条的颜色(最初进度条颜色为绿色).现在,我尝试使用以下代码将条形颜色设置为红色OnInitDialog(),

BOOL OnInitDialog()
{
    CPropertyPage::OnInitDialog();
    m_ProgressBar->SetRange32(0,100);
    m_ProgressBar->SetPos(50);
    m_ProgressBar->SetBarColor(RGB(255,0,0));
    return TRUE;
}
Run Code Online (Sandbox Code Playgroud)

这是我必须改变条形颜色,我使用的是Windows 7操作系统.我观察到的一件事是,当我将主题更改为"windows classic"时,我能够看到我设置的颜色(在本例中为红色).但是,如果我再次回到Windows 7 aero主题,颜色再次变为绿色.

此外,我甚至SetBkColor在这里检查了方法,它与我使用时遇到的问题相同SetBarColor().

任何人都可以建议一种可能的方法来改变所有主题的条形颜色(我认为如果它支持所有类型的主题会没有问题)?

Cod*_*ray 7

进度条颜色由当前系统主题决定; 没有提供自定义功能.如果用户具有"Windows经典"主题集,则进度条将填充系统突出显示颜色.如果用户具有Aero主题集,则使用Aero进度条样式,其确实使用绿色.

如果要更改进度条的呈现方式,则需要更改系统范围的主题.当然,这不是应用程序应该做的事情 - 用户会做的事情是因为他们更喜欢不同的主题.例如,他们可能会安装一个具有蓝色进度条的主题.网上有很多例子.生成这些主题很容易; 您只需aero.msstyle在资源编辑器中打开该文件,然后修改用于显示进度条的图像.

但是,Aero风格的进度条确实有三种不同的状态:正常,暂停和错误.在正常状态下,它充满绿色.在暂停状态下,它充满黄色,在错误状态下,它充满红色.

Aero风格进度条样本,每个进度条设置为不同的状态

但是你不应该只是因为你想让它成为某种颜色而改变进度条的状态 - 这三种状态除了它们的颜色之外还具有特定的语义含义.理论上,颜色甚至可以改变以适应不同的区域(虽然我怀疑它们是).考虑一下Windows用户体验指南对进度条的看法; 特别:

进度条颜色

  • 仅使用红色或黄色进度条指示进度状态,而不是任务的最终结果.红色或黄色进度条表示用户需要采取某些操作来完成任务.如果条件不可恢复,请将进度条保留为绿色并显示错误消息.
  • 当存在阻止进一步进展的用户可恢复条件时,将进度条变为红色.显示消息以解释问题并推荐解决方案.
  • 将进度条变为黄色以指示用户已暂停任务或者存在阻碍进度但仍在进行的情况(例如,网络连接较差).如果用户已暂停,请将"暂停"按钮标签更改为"恢复".如果进度受阻,请显示消息以解释问题并推荐解决方案.

如果您已决定更改进度条的状态适合您的情况,则可以通过将PBM_SETSTATE消息发送到控制窗口来执行此操作:

SendMessage(hwndProgressBar, PBM_SETSTATE, PBST_ERROR, 0);
Run Code Online (Sandbox Code Playgroud)

当然,它仅在启用Aero主题时有效."经典"式进度条没有任何结果.