您的位置:首页 > 其它

实现STATIC控件透明

2015-04-27 17:27 162 查看
当对话框有背景色的时候,我们放一个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是透明且需要不断刷新的控件。这样就实现了控件透明而且没有闪烁的问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: