如何清除标签标题



我正在使用带有OnCtrlcolor事件的标签:

我已经将标签的背景颜色设置为与表单相同,

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是一种画笔,用于指示系统将使用该画笔的任何绘制操作变成非操作。使用它实际上并不能使控件透明。它只是看起来是透明的,直到(它的一部分(被画好。

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

最简单的方法是返回DC_BRUSH,并附带调用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,并获得您想要的结果。

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

您正在返回NULL_BRUSH,因此";擦除背景";什么也不做。

返回颜色为RGB(245, 245, 245)的实心笔刷。设置新文本后,您可能还需要为该窗口调用Invalidate

最新更新