为 MFC 静态标签的整个背景着色

Posted

技术标签:

【中文标题】为 MFC 静态标签的整个背景着色【英文标题】:Coloring the entire background of an MFC static label 【发布时间】:2015-05-06 01:29:10 【问题描述】:

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

注意:关于上述答案的吸引人的特性(无论如何对我来说)是它利用了OnCtlColor(),它提供了一个指向相关CWnd 控件的指针。所以不需要创建CStatic 的子类来处理颜色变化。避免创建此类子类的答案将是首选。

【问题讨论】:

您想为您的父对话框处理带有 OnCtlColor() 消息的代码吗? 【参考方案1】:

我不太确定 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);
    
  

【讨论】:

【参考方案2】:

您可以使静态控件在资源编辑器中不可见,然后从 CMyDialog 绘制它。

void CMyDialog::OnPaint()

    CDialog::OnPaint();
    paintstatic(IDC_STATIC1);


void CMyDialog::paintstatic(int id)

    CClientDC dc(this);
    CRect rc;
    CWnd *child = GetDlgItem(id);
    child->GetWindowRect(&rc);
    CPoint offset(0, 0);
    ClientToScreen(&offset);
    rc.OffsetRect(-offset);
    dc.FillSolidRect(rc, RGB(0, 255, 128));

    CFont *font = GetFont();
    dc.SelectObject(font);
    CString text;
    child->GetWindowText(text);
    dc.DrawText(text, rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);

【讨论】:

当你自己做所有的绘画时,为什么要调用默认绘画? @xMRi:按照我的做法,调用默认绘制是强制性的。如果使用了CPaintDC,则不应调用CDialog::OnPaint。但我使用CClientDC 绘制静态控件,以防静态控件需要独立于OnPaint 进行更新。 没有。它不是必需的。如果您自己完成全部工作,您可以自己使用 CPaintDC(而不是 CClientDC)。 @xMRI:它不是绘制整个对话框,它只是对话框中的一个静态控件。该问题引用了静态控件,该控件需要更改背景以响应按钮单击或计时器,而无需使用子类。这是我知道如何做到这一点的唯一方法,而不必每次单击按钮时都更新整个对话框。它需要CClientDC 哦。是的,我明白了,但更奇怪的是……从父母那里画一个孩子?

以上是关于为 MFC 静态标签的整个背景着色的主要内容,如果未能解决你的问题,请参考以下文章

MFC 中的粗体标签

MFC设置静态文本框背景为透明

MFC 在应用程序的所有视图上共享一个静态标签

mfc怎么修改静态文本控件文字颜色

css静态网页背景颜色或者背景图片宽度都不能占满整个网页,右边有很大一块白色的,代码如下图,求解决。

MFC设置静态文本框,编辑框等控件背景和字体颜色