首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

静态文本框的透明背景文字重叠的有关问题

2013-12-15 
静态文本框的透明背景文字重叠的问题先上代码void CFive_Chess_01Dlg::OnTimer(UINT nIDEvent) {// TODO:

静态文本框的透明背景文字重叠的问题
先上代码


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控件。

热点排行