实现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是透明且需要不断刷新的控件。这样就实现了控件透明而且没有闪烁的问题了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值