如果要更改“常规”文本标签的背景颜色,This Answer确实很棒。但是,如果您想在该文本标签周围设置边框并扩大其大小,以使文本在真实的彩色海洋中游泳,该怎么办?它仅以所需的颜色绘制文本背景,而其余的扩展控件保留为标准按钮面。如何使颜色在整个控件中保持一致?

注意:关于上述答案的吸引人的功能(无论如何对我而言)是它利用了OnCtlColor(),它提供了指向有关CWnd控件的指针。因此,无需创建CStatic的子类来处理颜色变化。避免创建此类子类的答案将是首选。

最佳答案

我不太了解OP的“注释”部分。仍在发布此代码以获得他的帮助。

HBRUSH CSampleDlg::OnCtlColor(CDC* pDC, CWnd *pWnd, UINT nCtlColor)
{
  switch (nCtlColor)
  {
  case CTLCOLOR_STATIC:
    {
      CRect rcWindow(0, 0, 220, 40);
      //::GetWindowRect(pWnd->GetSafeHwnd(), &rcWindow);
      pDC->FillSolidRect(rcWindow, RGB(49, 49, 49));
      pDC->SetTextColor(RGB(255, 255, 255));
      return (HBRUSH)GetStockObject(NULL_BRUSH);
    }
  default:
    {
      return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    }
  }
}

关于c++ - 为MFC静态标签的整个背景着色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30065962/

10-08 21:04