静态文本框的透明背景文字重叠的问题
先上代码
void CFive_Chess_01Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
//时间倒数函数
if(TRUE==m_start)
{
if(1==nIDEvent)
{
CString sTime1;
time--;
if(time>=10)
{
sTime1.Format("%d",time);
}
if(time<10)
{
sTime1.Format("0%d",time);
}
GetDlgItem(IDC_TIME)->Invalidate();
GetDlgItem(IDC_TIME)->SetWindowText(sTime1);
}
//总时间
if (2==nIDEvent)
{
m_start_time++;
int minutes=m_start_time/60;
int seconds=m_start_time%60;
CString sTime;
if(minutes>=10)
{
if (seconds>=10)
{
sTime.Format("总时间:%d:%d",minutes,seconds);
}
else
{
sTime.Format("总时间:%d:0%d",minutes,seconds);
}
}
if(minutes<10)
{
if (seconds>=10)
{
sTime.Format("总时间:0%d:%d",minutes,seconds);
}
else
{
sTime.Format("总时间:0%d:0%d",minutes,seconds);
}
}
// GetDlgItem(IDC_TOTALTIME)->Invalidate();
GetDlgItem(IDC_TOTALTIME)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_TOTALTIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_TOTALTIME)->SetWindowText(sTime);
}
}
CDialog::OnTimer(nIDEvent);
}
这个是在ONTime函数里面的操作,前提: 我在CtlColor里面把静态标签IDC_TOTALTIME,IDC_TIME设为透明的了,但是这个是计时用的,就会发生重叠。
关于网上说怎么解决重叠有很多,那个52,53行的做法 使窗口隐藏在显示能用,但是过一段时间就会闪烁,而且闪的很厉害。
所以我用了GetDlgItem(IDC_TIME)->Invalidate();这个函数,这个函数没有问题,上面代码能运行。可是关键是下面的问题:
要是GetDlgItem(IDC_TIME)->Invalidate();
GetDlgItem(IDC_TOTALTIME)->Invalidate();//也就是注释的51行,然后把52,53行注释。
这样子两个函数都调用的话,两个静态标签都发生有重叠的文字,这个是怎么回事?
如果只用其中的一个就没有事,但是没用Invalidate()的一个标签会闪烁,难道Invalidate()只能调用一次吗?
[解决办法]
之前也遇到过这个问题,是通过
CStatic::ShowWindow(SW_HIDE);
CStatic::SetWindowText(_T("xxx"));
CStatic::ShowWindow(SW_SHOW);
这样解决的。
静态文本(CStatic)控件文本重叠的解决方法
但没有试过同时使用2个透明的Static控件。