如何清除标签标题?

How to clear label caption?

我在 OnCtrlcolor 事件中使用标签:

我已经把label的背景色设置成和表格一样了,

  if (iD == IDCmylabel)
      {
        pDC->SetTextColor(blue);
        COLORREF normal = RGB(245, 245, 245);
        pDC->SetBkColor(normal);
        return (HBRUSH)GetStockObject(NULL_BRUSH);
      }

所以我想使用 toogle:

SetWindowTextW("abc..."); // will show the color as expected.
SetWindowTextW(nullptr);  // will remove the text color.

但是这对我不起作用(标题没有重绘,因为它仍然存在)。

我该如何解决这个问题?

有人需要擦除旧文本下的背景。

您正在返回 NULL_BRUSH,因此“擦除背景”没有任何作用。

Return颜色RGB(245, 245, 245)的实心画笔。您可能还需要在设置新文本后为 window 调用 Invalidate

NULL_BRUSH 是一个画笔,它指示系统将使用该画笔的任何绘画操作变为空操作。使用它实际上并不能使控件透明。它只是看起来是透明的,直到(它的一部分)被涂上。

如果您想要一个具有特定背景颜色的控件,无论显示的文本大小如何,您都必须提供纯色画笔。

最简单的方法是 return 一个 DC_BRUSH, with an accompanying call to SetDCBrushColor 来请求颜色,即

if (iD == IDCmylabel) {
    pDC->SetTextColor(blue);
    COLORREF normal = RGB(245, 245, 245);
    // Still required so that the text background matches that of the rest
    pDC->SetBkColor(normal);
    // Request brush color for the control background
    pDC->SetDCBrushColor(normal);
    // Note: Stock objects do not need to be freed by client code
    return (HBRUSH)GetStockObject(DC_BRUSH);
}

有了它,您可以使用任意参数调用 SetWindowText 并获得您要查找的结果。