我在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"两个字符交替变颜色
百思不得其解。。
比
如
这
样
但是,总是有一部分不会显示出来。后来我发现原来是,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"两个字符交替变颜色
百思不得其解。。
别忘了清空一下缓冲区
dc->SetTextColor(RGB(255,0,0));
dc->DrawText (buf,&rt,DT_LEFT);
_sleep(1000);
这不行啊,休息1秒后画红线,再休息1秒后画绿线,
在OnTimer里试试改变下BOOL值,在OnPaint()里输出颜色
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); }
我是楼主,两次调用DrawText给了我灵感,我想试不是重绘有延迟呢。呵呵,于是我在DrawText之后调用了ValidateRect;问题解除;关键是重绘有延迟呢!结贴!