实现STATIC控件透明

当对话框有背景色的时候,我们放一个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是透明且需要不断刷新的控件。这样就实现了控件透明而且没有闪烁的问题了。

你可能感兴趣的:(实现STATIC控件透明)