当对话框有背景色的时候,我们放一个STATIC控件上去,背景就变成了STATIC控件的颜色(灰色)。为了达到透明效果,可以在消息函数OnCtlColor中添加以下代码以达到透明效果:
//所有static控件背景透明
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
//或者只需要某一个控件透明
if(pWnd->GetDlgCtrlID() == IDC_STC_LABEL1)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
这样我们的控件就实现透明了。我们可以在上面显示时钟,用定时器不断更新TEXT显示时间。问题来了,显示位置出现了重影。如何解决呢,我们可以调用Invalidate(TRUE);
使窗口重绘就可以了。
问题又来了,由于不断的更新时间,不断地重绘窗口,会导致窗口不断闪烁,这...
没关系,我们可以用局部刷新来解决,而不是刷新整个窗口。
CRect rect;
(GetDlgItem(IDC_STC_DATE))->GetWindowRect(rect);
ScreenToClient(rect);
InvalidateRect(rect);
其中IDC_STC_DATE是透明且需要不断刷新的控件。这样就实现了控件透明而且没有闪烁的问题了。