我在DC中,尝试垂直的输出文字的时候,




但是,总是有一部分不会显示出来。后来我发现原来是,dc->FillRect(&rt,&brush);在作怪。我原本是打算做个闪烁效果的,谁知道用了FillRect会导致一部分不显示出来。然后我想通过改变文字颜色与背景色相同,达到擦除文字的目的。结果更不可思意的事情发生了。看代码片段:
         CSting buf = "a\r\nb\r\n";
for(i = 0 ;i<5;i++)
{
dc->SetTextColor(RGB(0,255,0));
dc->DrawText (buf,&rt,DT_LEFT);
_sleep(1000);
dc->SetTextColor(RGB(255,0,0));
dc->DrawText (buf,&rt,DT_LEFT);
_sleep(1000);

}
预期效果是"ab"会红绿交替,但是运行效果居然是"a"先绿色,而"b"先红色;然后"a"和"b"两个字符交替变颜色
百思不得其解。。

解决方案 »

  1.   

    何必写一起呢buf1 buf2 buf3 buf4buf2 buf4 专门换行 试试
    别忘了清空一下缓冲区
      

  2.   

    _sleep(1000); 
    dc->SetTextColor(RGB(255,0,0)); 
    dc->DrawText (buf,&rt,DT_LEFT); 
    _sleep(1000); 
    这不行啊,休息1秒后画红线,再休息1秒后画绿线,
    在OnTimer里试试改变下BOOL值,在OnPaint()里输出颜色
      

  3.   

    你改成这样:       
    CSting buf = "a\r\nb\r\n"; 
    for(i = 0 ;i <5;i++) 

    dc->SetTextColor(RGB(0,255,0)); 
    dc->DrawText (buf,&rt,DT_LEFT); 
    dc->SetTextColor(RGB(0,255,0)); 
    dc->DrawText (buf,&rt,DT_LEFT); 
    _sleep(1000); 
    dc->SetTextColor(RGB(255,0,0)); 
    dc->DrawText (buf,&rt,DT_LEFT); 
    dc->SetTextColor(RGB(255,0,0)); 
    dc->DrawText (buf,&rt,DT_LEFT); 
    _sleep(1000); } 
      

  4.   


    我是楼主,两次调用DrawText给了我灵感,我想试不是重绘有延迟呢。呵呵,于是我在DrawText之后调用了ValidateRect;问题解除;关键是重绘有延迟呢!结贴!