2024年4月29日发(作者:)

我也来说说透明静态文本框的实现

Google一下“透明静态文本框”,给出的大多数都是靠如下代码来实现的:

HBRUSH CTransparentLabelDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT n

CtlColor)

{

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

if (CTLCOLOR_STATIC == nCtlColor)

{

pDC->SetBkMode(TRANSPARENT);

return (HBRUSH)GetStockObject(NULL_BRUSH);

}

// TODO: 如果默认的不是所需画笔,则返回另一个画笔

return hbr;

}

效果如图:

在大多数情况下这种方法都没问题,但是,当需要动态更改静态文本框中的内容时就

会出现这样的问题:

也就是出现了文字重叠现象。

其原因出在“透明”身上。一般情况下在绘制界面时会先绘制对话框的背景然后才会